怎样将DWORD转换成byte呢??高分求助

DeanDeanDean 2010-01-05 07:24:16
现在有一个包头:
struct packageHead
{
DWORD Command_Length;
DWORD Command_ID;
DWORD Command_status;
DWORD Sequence_No;

};
现在我想把该包头拷贝到一个byte数组中,我先要将DWORD类型的Command_Length,Command_ID,Command_status,Sequence_No转换为byte类型,再用memcpy拷贝.那么我该怎样将DWORD转换成byte呢??
谢谢先!```
...全文
757 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
不秃头的IT者 2010-01-06
  • 打赏
  • 举报
回复
yte *pac=new byte[sizeof(header)];
memset(pac,0,sizof(header));
memcpy(pac,&header,sizeof(header));
cattycat 2010-01-06
  • 打赏
  • 举报
回复
强制转换吧,struct是连续的。
你这种不对

byte *pac=new byte[header.Command_Length];
memset(pac,0,header.Command_Length);
memcpy(pac,&header,sizeof(header));

应该是

byte *pac=new byte[sizeof(header)];
memset(pac,0,sizof(header));
memcpy(pac,&header,sizeof(header));
DeanDeanDean 2010-01-06
  • 打赏
  • 举报
回复
我是这样做的:
先给结构体header赋值
byte *pac=new byte[header.Command_Length];
memset(pac,0,header.Command_Length);
memcpy(pac,&header,sizeof(header));

最后查看pac里面没对```这该怎么办阿?~```
sj13426074890 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 deandeandean 的回复:]
楼上这样转出来我调试的时候看pac里面什么都没有阿?~```memcpy(pac,&header,sizeof(header));
[/Quote]

那可能是header里面没东西吧
你先输出header里面的东西 看看
ypb362148418 2010-01-06
  • 打赏
  • 举报
回复
强制转化就行了,你看看DWORD是什么的别名,就知道为什么可以强制转化了
holmesyi 2010-01-06
  • 打赏
  • 举报
回复
强转喽
DeanDeanDean 2010-01-06
  • 打赏
  • 举报
回复
帮帮忙阿大哥
赵4老师 2010-01-06
  • 打赏
  • 举报
回复
VC6调试时按Alt+8打开汇编窗口看每句C对应的汇编。
DeanDeanDean 2010-01-06
  • 打赏
  • 举报
回复
接上面的:
最后一句memcpy(pac,&header,16);

struct packageHead
{
DWORD Command_Length;
DWORD Command_ID;
DWORD Command_status;
DWORD Sequence_No;

};
DeanDeanDean 2010-01-06
  • 打赏
  • 举报
回复
我程序大概是这样的:
char SYSTEM_ID[16];
char SYSTEM_PASS[9];
char SYSTEM_TYPE[13];

memset(SYSTEM_ID,0,sizeof(SYSTEM_ID));
strcpy(SYSTEM_ID,"ttt");
memset(SYSTEM_PASS,0,sizeof(SYSTEM_PASS));
strcpy(SYSTEM_PASS,"ttt");
memset(SYSTEM_TYPE,0,sizeof(SYSTEM_TYPE));
strcpy(SYSTEM_TYPE,"WWW");
memset(SYSTEM_ADDR_RANGE,0,sizeof(SYSTEM_ADDR_RANGE));
strcpy(SYSTEM_ADDR_RANGE,"\0");

int system_id_Length=strlen(SYSTEM_ID);
int password_Length=strlen(SYSTEM_PASS);
int system_type_Length=strlen(SYSTEM_TYPE);
int address_range_Length=strlen(SYSTEM_ADDR_RANGE);

packageHead header;
header.Command_ID=ESME_BNDTRN;
header.Command_Length=19+system_id_Length+password_Length+system_type_Length+address_range_Length;//确定长度的有19,再加变长
header.Sequence_No=AddSerno();
header.Command_status=0;

byte *pac=new byte[header.Command_Length];
memset(pac,0,header.Command_Length);
是不是我结构体没弄对阿,但调试的时候看到里面有值的
DeanDeanDean 2010-01-06
  • 打赏
  • 举报
回复
byte *pac=new byte[header.Command_Length]; 这样是由于用pac存的包不仅含有包头,也有包体,
我先分配整个包的长度,
然后把包头先放进去memcpy(pac,&header,sizeof(header));
再放包体```但是现在把包头放进去看到pac什么都没有```
haohaokingXP 2010-01-05
  • 打赏
  • 举报
回复
memcpy(pac,&header,sizeof(header));
这样就OK了。

DeanDeanDean 2010-01-05
  • 打赏
  • 举报
回复
楼上这样转出来我调试的时候看pac里面什么都没有阿?~```memcpy(pac,&header,sizeof(header));
mngzilin 2010-01-05
  • 打赏
  • 举报
回复
packageHead head;
....
char *p;
....
memcpy(p, &head, sizeof(packageHead));
DeanDeanDean 2010-01-05
  • 打赏
  • 举报
回复
主要后面还有包体,那packageHead只是个包头,全部都要对上位子才行阿```
herman~~ 2010-01-05
  • 打赏
  • 举报
回复
楼主是要将一个结构体打包发送吧

byte *pac=new byte[header.Command_Length];
memcpy(pac, &header, sizeof(packageHead));
chengqian0929 2010-01-05
  • 打赏
  • 举报
回复
直接强转就可以了,我现在做的项目也是处理数据包的
DeanDeanDean 2010-01-05
  • 打赏
  • 举报
回复
我是这样用的:
byte *pac=new byte[header.Command_Length];
memset(pac,0,header.Command_Length);

memcpy(pac,&header.Command_Length,4);

memcpy(&pac[4],&header.Command_ID,4);

memcpy(&pac[8],&header.Command_status,4);

memcpy(&pac[12],&header.Sequence_No,4);
但是这样下来不对阿``````帮帮忙阿
SammyLan 2010-01-05
  • 打赏
  • 举报
回复
如果不是考虑字节序的话
可以直接参考甘草的办法
damo_xu 2010-01-05
  • 打赏
  • 举报
回复
楼上正解。
结构体的内存放置是连续的,你memcpy也是拷贝一段内存,所以你拷贝以后,你想怎么用这段内存就随你了。
加载更多回复(2)

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧