gpt4 book ai didi

c - 如何将 char[2] 转换为 C 中的 unsigned short?

转载 作者:太空宇宙 更新时间:2023-11-04 00:30:39 25 4
gpt4 key购买 nike

我在转换数据时遇到问题。

我得到了一个特定的字符串(它实际上只代表一些数据位(小端),而不是文本):

char freeBlockSize[2];

我想把它转换成这种类型:

unsigned short numOfBlocks;

我一直在尝试下面的代码,但它似乎打印出垃圾,因为每次我运行它时,我都会得到不同的“numOFBlocks”值输出(freeBlockSize 由另一个函数提供给我,并且始终是相同):

unsigned short numOFBlocks = (unsigned short)freeBlockSize;

printf("Test: %d %d\n",freeBlockSize[0],freeBlockSize[1]);
printf("Value: %hu\n",numOFBlocks);

预先感谢您的帮助。

最佳答案

使用:

  unsigned short numOFBlocks = *(unsigned short *)freeBlockSize;

但要小心:如果您在 freeBlockSize 中的数据的字节序与您机器的字节序相同,这将起作用,这可能是也可能不是这种情况,具体取决于数据的来源存储在该 vector 中的数据。


更新:使用这种方法访问未对齐的指针存在一定的风险,因此这里有另一种方法可以规避此问题:

unsigned short numOfBlocks = ((freeBlockSize[1] << 8) &0xFF00) | (freeBlockSize[0] & 0xFF);

这会将 freeBlockSize 指向的 16 位数字作为 LE 数字,并将其以主机端格式存储到 numOfBlocks 中。之前的方法没有考虑主机字节序,因此只有当 freeBlockSize 中存储的数据与主机数据的格式相同时,它才有效。

关于c - 如何将 char[2] 转换为 C 中的 unsigned short?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com