在 C 中缩短 2 个字符

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. 什么是首选方法?

qap*_*hla 5

可能将两个字符 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)


faf*_*frd 5

我发现接受的答案几乎是正确的,除了我遇到一个错误,有时结果的最高字节是0xff......

我意识到这是因为 C 符号扩展。如果第二个字符 >= 0x80,则转换0x80为短字符变为0xff80。对任何内容执行“或”0xff80都会导致剩余的最高字节0xff

以下解决方案通过在隐式转换为短整型期间将 b 的顶部字节清零来避免该问题。

short c = (((short)a) << 8) | (0x00ff & b);
Run Code Online (Sandbox Code Playgroud)