首页 > 解决方案 > 将 8 位有符号整数转换为无符号整数,然后再转换为 int32

问题描述

我有一个带符号int8_t的8-55整数uint8_t

然后这个uint8_t值被传递给另一个硬件(它只能处理 32 位类型)并且需要转换为int32_t.

我怎样才能做到这一点?

示例代码:

#include <stdio.h>
#include <stdint.h>

void main() {

    int8_t input;
    uint8_t package;
    int32_t output;

    input = -5;
    package = (uint8_t)input;
    output = (int32_t)package;

    printf("output = %d",output);
}

在这个例子中,我从-5. 它暂时被强制转换为251,因此可以打包为uint8_t. 然后,此数据被发送到另一块硬件,在该硬件中,我无法(int8_t)在转换为int32_t. 最终,我希望能够获得原始-5值。

有关更多信息,接收硬件是不允许的 SHARC 处理器int8_t- 请参阅https://ez.analog.com/dsp/sharc-processors/f/qa/118470/error-using-stdint-h-types

SHARC 处理器上最小的可寻址内存单元是 32 位,这意味着任何数据类型的最小大小都是 32 位。这适用于原生 C 类型,如 char 和 short。由于类型“int8_t”、“uint16_t”指定类型的大小必须分别为 8 位和 16 位,因此 SHARC 不支持它们。

标签: cinteger

解决方案


如果您想使用 32 位操作恢复负号,您可以执行以下操作:

   output = (int32_t)package;
   if (output & 0x80) { /* char sign bit set */
        output |= 0xffffff00;
   }

   printf("output = %d",output);

推荐阅读