急问,怎么把指针和指针长度,重新转成unsigned short

AYZBL 2009-12-02 09:32:19
C51 单片机中,PC端传给单片机的是一个byte[]类型的数组,和数组的长度。
单片机中定义的接受变量为 pbInBuff(传入数据的地址) , 和bInLen(传入数据的长度)

定义如下:
#define pbInBuff ((BYTE xdata *)0x0801)
define bInLen (*(BYTE xdata *)0x1000)


我在PC端传给单片机的是一个把变量id (unsigned int类型) 转化成的byte[] 数组传入单片机。

现在怎么把在单片机端接收到的pbInBuff 和bInLen,重新还原成unsigned short 的id
...全文
203 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
苍蝇①号 2009-12-02
  • 打赏
  • 举报
回复
楼上的都把方法说了,我补充一点,就是要注意字节序问题,如果单片机和pc用的字节序不一样的话很容易出问题
至善者善之敌 2009-12-02
  • 打赏
  • 举报
回复
楼上都以说明白了,另外楼主的单片机不知道是几位的,如果是32位的,那么存储在(void *)里即可!如果是8位或16位的,那就要对存储空间进行调整了DW 16位!
hbvanguard 2009-12-02
  • 打赏
  • 举报
回复

unsigned short BytesToShort(byte* srcByte)
{

if ( NULL == srcByte )
{
return 0;
}
unsigned short Value = 0;
memcpy(&Value,srcByte,sizeof(unsigned short));
return Value;
}
AYZBL 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 loaden 的回复:]
引用 5 楼 ayzbl 的回复:
引用 3 楼 loaden 的回复:
这没办法。
指针是4byte
而ushort是2byte
会丢失数据,就不对了。


那么

改成 unsigned int * fid = (unsigned short *)pbInBuff;

就可以了么?

也不行的。
(unsigned short *)pbInBuff;
这里有一个强制转换,已经把数据丢失一部分了。
[/Quote]

写错了,应该是unsigned int * fid = (unsigned int *)pbInBuff;

接收端数据类型可以自己决定的。
  • 打赏
  • 举报
回复
unsigned int * fid = (unsigned short *)pbInBuff;

fid跟pbInBuff都是指针,都是4字节,你这里转来转去,转的只是指针类型而已。
老邓 2009-12-02
  • 打赏
  • 举报
回复
为什么一定要保存在ushort里呢?
指针如果要保存,也应该保存在:void*里,这样可以保证指针长度的一致。

另,将来x64怎么办?
到那时,指针长度是8byte,而ushort还是2byte。
老邓 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ayzbl 的回复:]
引用 3 楼 loaden 的回复:
这没办法。
指针是4byte
而ushort是2byte
会丢失数据,就不对了。


那么

改成 unsigned int * fid = (unsigned short *)pbInBuff;

就可以了么?
[/Quote]
也不行的。
(unsigned short *)pbInBuff;
这里有一个强制转换,已经把数据丢失一部分了。
AYZBL 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 loaden 的回复:]
这没办法。
指针是4byte
而ushort是2byte
会丢失数据,就不对了。
[/Quote]

那么

改成 unsigned int * fid = (unsigned short *)pbInBuff;

就可以了么?
hai040 2009-12-02
  • 打赏
  • 举报
回复
unsigned short id = *(unsigned short *)pbInBuff
老邓 2009-12-02
  • 打赏
  • 举报
回复
这没办法。
指针是4byte
而ushort是2byte
会丢失数据,就不对了。
AYZBL 2009-12-02
  • 打赏
  • 举报
回复
我现在单片机里的程序是这么写的unsigned short * id = (unsigned short *)pbInBuff;

不过好像不对。
十一文 2009-12-02
  • 打赏
  • 举报
回复
帮顶

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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