将无符号字符转换为有符号整数

Tre*_*vor 6 c arrays int char

我有一个unsigned char数组,其中包含2个表示有符号整数的元素.如何将这2个字节转换为有符号整数?

编辑:unsigned char数组是小端

Fre*_*Foo 6

为了最大限度地提高安全性

int i = *(signed char *)(&c[0]);
i *= 1 << CHAR_BIT;
i |= c[1];
Run Code Online (Sandbox Code Playgroud)

对于大端.交换c[0]和c[1]小端.

(解释:我们将字节解释c[0]为a signed char,然后以算法方式左移它以便携方式,然后加入c[1].)


小智 5

将它们包装在一个联合中:

union {
  unsigned char a[2];
  int16_t smt;
} number;
Run Code Online (Sandbox Code Playgroud)

现在填充数组后,您可以将其用作 number.smt

  • @VGE:`short`到`int`转换是明确定义的.虽然我建议使用`int16_t`而不是`short`. (2认同)