c - 将 8 位有符号整数转换为无符号整数,然后再转换为 int32
问题描述
我有一个带符号int8_t
的8-5
位5
整数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 不支持它们。
解决方案
如果您想使用 32 位操作恢复负号,您可以执行以下操作:
output = (int32_t)package;
if (output & 0x80) { /* char sign bit set */
output |= 0xffffff00;
}
printf("output = %d",output);
推荐阅读
- c# - 验证 PrintJob 状态(热)
- php - MYSQL 错误 - 由于目标机器拒绝而无法建立连接
- javascript - jquery创建html添加javascript事件不起作用
- save - 从 sharedPreferences 重置值
- jquery - 如何从动态生成的数组值中删除双引号
- wordpress - 碳场不显示人造场
- jenkins-pipeline - 使用 Jenkins webhook 触发器基于提交消息触发构建。
- java - 无法进行 API 调用邮件。在既不是原始请求线程也不是由 ThreadManager 创建的线程的线程中发送
- ios - 播放音量静音时 iPhoneX 中的问题
- angular - 在 Typescript 中将图像转换为 base64 字符串