我在转换数据时遇到问题。
我得到了一个特定的字符串(它实际上只代表一些数据位(小尾数),而不是文本):
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
中拥有的数据的endianess与您的机器的endianess相同(可能是这样,也可能不是这样),这将起作用,这取决于存储在该向量中的数据的源。更新:使用此方法访问未对齐的指针有一定的风险,因此这里有另一个解决此问题的方法:
unsigned short numOfBlocks = ((freeBlockSize[1] << 8) &0xFF00) | (freeBlockSize[0] & 0xFF);
这将把freeBlockSize所指的16位数字作为LE数字,并以主机endian格式将其存储到numOfBlocks中前一种方法没有考虑主机endian,因此只有在freeBlockSize中存储的数据与主机数据的格式相同时,它才起作用。