You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求C语言中从字节数组提取带符号8位数据的函数实现

解决方案

需求分析

需要实现两个函数:

  • 从指定索引index处提取带符号8位整数(对应大端格式的最高字节)
  • 从指定索引index+3处提取带符号8位整数(对应小端格式的最低字节)
    核心是完成符号扩展,将无符号字节转换为带符号整数时保留符号位。

函数实现

1. 提取大端格式对应字节(index位置)

int extract_signed_byte_big_endian(const unsigned char* arr, int index) {
    // 强制转换为signed char自动完成符号扩展,再转int保留符号
    return (int)(signed char)arr[index];
}

2. 提取小端格式对应字节(index+3位置)

int extract_signed_byte_little_endian(const unsigned char* arr, int index) {
    return (int)(signed char)arr[index + 3];
}

原理说明

  • 无符号字节(unsigned char)的范围是0~255,带符号8位整数的范围是-128~127
  • 当字节的最高位(第7位)为1时,表示负数,需要将高位全部填充为1完成符号扩展
  • 使用signed char强制转换是最简洁的方式:signed char会自动识别符号位,转换为int时会将符号位扩展到整个int的高位

示例验证

以整数500500为例,其二进制为00000000 00000111 10100011 00010100,十六进制为0x0007A314:

  • 存储后arr[index] = 0x00,调用extract_signed_byte_big_endian返回0
  • 存储后arr[index+3] = 0x14,调用extract_signed_byte_little_endian返回20

若存储的是负数-123(十六进制0xFFFFFF85):

  • arr[index] = 0xFF,提取后返回-1
  • arr[index+3] = 0x85,提取后返回-123

内容的提问来源于stack exchange,提问作者HyperCoderSuperion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:07:17