CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请问#pragma pack是什么意思?

楼主leiting(Game)2001-05-29 08:15:00 在 VC/MFC / 基础类 提问

请问#pragma   pack(1)预编译命令是什么意思?起什么具体作用? 问题点数:30、回复次数:4Top

1 楼eggplant(拉拉)回复于 2001-05-29 08:23:00 得分 15

主要用来设置结构定义的字节对齐方式,比如是单字节对齐,双字节对齐等,比如如果是双字节对齐,那么结构的成员变量的地址必须是2的整数倍,这就造成了字节补齐,但是提高了访问速度。单字节呢,就是没有补齐,成员变量的地址是连续的,其他依次类推,通常是4,8等。通常用于网络传输数据,特别是传输整个结构时,必须采取单字节对齐,这样才可以直接把结构地址,以及结构长度,作为Send的参数发送整个结构,否则只能依次发送结构的成员,要不然会出现结构解释的差异。  
   
  另外,在Project->Setting->C/C++->Code   Generation->Struct   member   alignment中可以设置结构的对齐方式。  
   
  其他的你就自己慢慢看吧。   Top

2 楼verybigbug(等待中)回复于 2001-05-29 08:52:00 得分 15

传输结构时和pack无关,只要Recv端定义的结构和Send方一样就没问题了。  
  pack多用于Hook程序,比如Hook   Api技术,因为需要硬编码,所以必须将结构  
  压缩,将内容补齐!  
  比如:  
  ASM_STRUCT{  
      BYTE   bJmp;  
      DWORD   dwDes;  
  }a;  
  如果不用Pack时,编译为:  
    a.bJmp   =   0xEB;   //   jmp的编码  
    a.dwDes   =   0x00410123;   //   jmp   0x00410123  
  不用pack的话,内存内容为     0xEB   XX   XX   XX   23   01   41   00   //   共8BYTE  
  其中XX为不定值,用pack后     0xEB   23   01   41   00   //   共5BYTE  
  这样,在Hook时运行这些指令,就必须用#parama   pack(1)   //   1   BYTE方式对齐。  
  Top

3 楼eggplant(拉拉)回复于 2001-05-29 23:19:00 得分 0

如果直接把结构地址,以及结构长度,作为Send的参数发送整个结构,难道不需要pack吗?请教verybigbug()兄。Top

4 楼verybigbug(等待中)回复于 2001-05-30 09:21:00 得分 0

不需要。  
  send(struct,   sizeof(struct));就可以了,如果两个程序都没有pack的话,  
  相同的结构体在接收数据时就没有问题。必须保证两边的pack都是一样才行。  
  我在写socket的程序(SDK方式)时送结构就从来不用pack的。  
  只在写Hook   Api时才用pack(1)。  
  Top

相关问题

  • 请问#pragma pack(1)是什么意思啊?
  • 语法问题,谢谢#pragma pack(1)什么意思
  • #pragma once 什么意思?
  • #pragma data_seg 是什么意思??
  • #pragma comment(lib,"winmm.lib")是什么意思
  • 请问“#pragma”是什么意思?
  • vc++中#pragma是什么意思
  • #pragma ... 说明的是什么意思
  • #pragma argsused是什么意思啊
  • 请问 #pragma 是什么意思?

关键词

  • 结构
  • pack
  • xeb
  • 单
  • 地址
  • 字节对齐
  • 补齐
  • 比如
  • 程序
  • 成员

得分解答快速导航

  • 帖主:leiting
  • eggplant
  • verybigbug

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo