我在转换数据时遇到问题。
我得到了一个特定的字符串(它实际上只代表一些数据位(小端),而不是文本):
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/