将无符号字符转换为有符号整数
我有一个 unsigned char 数组,其中有 2 个元素代表有符号整数。如何将这 2 个字节转换为有符号整数?
编辑:无符号字符数组采用小端字节序
I have an unsigned char array with 2 elements that represents a signed integer. How can I convert these 2 bytes into a signed integer?
Edit: The unsigned char array is in little endian
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
为了获得最大的安全性,请使用
大尾数法。将
c[0]
和c[1]
交换为小端。(说明:我们将
c[0]
处的字节解释为signed char
,然后以可移植的方式对其进行算术左移,然后添加到c[1 ]
。)For maximum safety, use
for big endian. Swap
c[0]
andc[1]
for little endian.(Explanation: we interpret the byte at
c[0]
as asigned char
, then arithmetically left shift it in a portable way, then add inc[1]
.)将它们包装在一个联合中:
现在填充数组后,您可以将其用作
number.smt
wrap them up in a union:
Now after filling the array you can use this as
number.smt
这取决于字节序。
适用于大端字节序的内容:
适用于小端字节序的内容:
It depend of endianness.
Something for big endian :
Something for little endian :
可移植的解决方案:
假设数组中的字节表示 16 位、二进制补码、大端有符号整数。如果它们是小端整数,只需交换
c[1]
和c[0]
即可。(在极不可能的情况下,它是补码,请使用
65535
而不是65536
作为要减去的值。符号大小留给读者作为练习; )The portable solution:
This assumes that the bytes in the array represent a 16 bit, two's complement, big endian signed integer. If they are a little endian integer, just swap
c[1]
andc[0]
.(In the highly unlikely case that it is ones' complement, use
65535
instead of65536
as the value to subtract. Sign-magnitude is left as an exercise for the reader ;)