Nam*_*nge 6 c int short type-conversion
我有 2 个字符。
字符128和字符2。
如何将这些字符转换为640C 中的 Short ?
我试过了
unsigned short getShort(unsigned char* array, int offset)
{
short returnVal;
char* a = slice(array, offset, offset+2);
memcpy(&returnVal, a, 2);
free(a);
return returnVal;
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,它只是将其显示为128. 什么是首选方法?
可能将两个字符 a 和 b 变成短 c 的最简单方法如下:
short c = (((short)a) << 8) | b;
Run Code Online (Sandbox Code Playgroud)
为了适应你所拥有的,最简单的方法可能是这样的:
unsigned short getShort(unsigned char* array, int offset)
{
return (short)(((short)array[offset]) << 8) | array[offset + 1];
}
Run Code Online (Sandbox Code Playgroud)
我发现接受的答案几乎是正确的,除了我遇到一个错误,有时结果的最高字节是0xff......
我意识到这是因为 C 符号扩展。如果第二个字符 >= 0x80,则转换0x80为短字符变为0xff80。对任何内容执行“或”0xff80都会导致剩余的最高字节0xff。
以下解决方案通过在隐式转换为短整型期间将 b 的顶部字节清零来避免该问题。
short c = (((short)a) << 8) | (0x00ff & b);
Run Code Online (Sandbox Code Playgroud)