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

标签 c type-conversion unsigned

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

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

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/

相关文章:

c - 从 C 函数返回 malloc

c - 我在哪里可以下载 gd.h?

ios - 麦克风播放的音频断断续续,听起来像是空气吹入麦克风

c# - 复制字节时出错 - 偏移量和长度超出范围。

C 无符号整数 + 整数

c++ - 如果我将 unsigned int 分配给 signed int,是否可以有未初始化的位

c - 简单 Mac OSX C 程序中的总线错误

c - sigaction() 的使用

C++最优化转换

c - 如何编写一些代码来判断变量是否有符号