VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2038|回复: 10

delphi中longword的字节存放顺序问题

[复制链接]

2

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-3-2 11:30:01 | 显示全部楼层 |阅读模式
var
iSourceNode:Longword;
curSequenceNumber:Array[0..4] of Byte;

copymemory(@curSequenceNumber,@iSourceNode,sizeof(iSourceNode));


如果iSourceNode=1的话,复制内存,那么缓冲区curSequenceNumber中得到的是
01 00 00 00,而不是我想要的00 00 00 01,请问为什么??

难道我每个数字写入缓冲区的时候,必须要手工交换高低字节吗??
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-12 17:30:01 | 显示全部楼层
01 00 00 00
相当于curSequenceNumber0]=1;
本来就是这样放的呀
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-13 12:45:01 | 显示全部楼层
高地址表示大数,高地址是后面的字节,本来就是这样放的,为什么要交换?
回复

使用道具 举报

2

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-5-13 21:45:01 | 显示全部楼层
你可能没有看明白我的意思:

假如一个longword变量,它在内存中占4个字节,请问,是怎么排列的?不会是01 00 00 00吧??

别人用vc写入的数据,就是00 00 00 01,而我用delphi写入的却是01 00 00 00,这样通过socket发送缓冲区出去,完全就不是那么回事了,而象这样的整形数序列话的变量还不止一个,不会每个都要我手工交换高低位吧??

回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-17 12:00:01 | 显示全部楼层
VC怎么排的不敢肯定,我想应该是与DELPH是一样的。
不然写的动态连接库岂不是乱套了,还哪谈得上通用性呀。

我想楼主担心的问题应该是多余的。

只要不自己定义排列顺序就行了。
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-17 22:15:01 | 显示全部楼层
iSourceNode=1的话,复制内存 相当于PLongword(@curSequenceNumber[0])=iSourceNode;
C语言里也用类似的机制,应该是不会出错的。
不要自己去指定哪个字节写什么值
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-17 23:00:01 | 显示全部楼层
iSourceNode=1的话,复制内存 相当于PLongword(@curSequenceNumber[0])^=iSourceNode;
C语言里也用类似的机制,应该是不会出错的。
不要自己去指定哪个字节写什么值
回复

使用道具 举报

2

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-5-19 22:00:01 | 显示全部楼层
那我现在要把数值1写入到4字节的缓冲区中,得到00 00 00 01,怎么个搞法??

var
iSourceNode:Longword;
curSequenceNumber:Array[0..4] of Byte;

iSourceNode:=1;

....................
接下来怎么整??   才能让curSequenceNumber中的是00 00 00 01,而不是01 00 00 00呀???
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-21 10:45:01 | 显示全部楼层
var
iSourceNode:Longword;
curSequenceNumber:Array[0..4] of Byte;
begin
iSourceNode:=1;
PLongword(@curSequenceNumber[0])^:= iSourceNode shl 32  ;
...
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-21 11:45:01 | 显示全部楼层
应该是这样:PLongword(@curSequenceNumber[0])^:= iSourceNode shl 24;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表