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

如何在十六进制char数组中加入变量用于串口传输?

构建含可变数据的串口十六进制数组最简方法

根据你的需求,核心是把多字节可变数据按通信协议要求的字节序拆分为单个字节,和固定字节组合成数组。以下是几种最简实现方式:

1. 编译期直接初始化(变量值固定时)

如果可变数据在编译时就确定,直接拆分多字节变量的字节填入数组即可。假设通信协议要求大端序(高位字节先发送,和你的示例一致):

// 定义可变变量
unsigned short var_2byte = 0x0001;  // 对应示例中的00 01
unsigned char var_1byte = 0xFF;     // 对应示例中的FF
unsigned int var_4byte = 0x00000001;// 对应示例中的00 00 00 01

// 组合成最终数组
unsigned char data[] = {
    0xF0,
    (var_2byte >> 8) & 0xFF, var_2byte & 0xFF,  // 拆分2字节变量为高、低字节
    var_1byte,
    (var_4byte >> 24) & 0xFF, (var_4byte >> 16) & 0xFF, 
    (var_4byte >> 8) & 0xFF, var_4byte & 0xFF,  // 拆分4字节变量
    0x0F
};

如果协议要求小端序,只需调换多字节变量的字节顺序(比如先放低字节,再放高字节)。

2. 运行时动态填充(变量值实时变化时)

如果可变数据是运行过程中才确定的,先声明固定长度的数组,再逐个位置赋值:

// 声明固定长度数组:1(开头)+2+1+4+1(结尾)=9字节
unsigned char data[9];

// 假设运行时已获取到var_2byte、var_1byte、var_4byte的值
data[0] = 0xF0;
// 填充2字节变量(大端序)
data[1] = (var_2byte >> 8) & 0xFF;
data[2] = var_2byte & 0xFF;
// 填充1字节变量
data[3] = var_1byte;
// 填充4字节变量(大端序)
data[4] = (var_4byte >> 24) & 0xFF;
data[5] = (var_4byte >> 16) & 0xFF;
data[6] = (var_4byte >> 8) & 0xFF;
data[7] = var_4byte & 0xFF;
// 填充结尾固定字节
data[8] = 0x0F;

这种方式适合需要频繁更新串口发送数据的场景。

3. 封装宏简化代码(重复构建数组时)

如果需要多次构建这类数组,可以用宏封装多字节变量的拆分逻辑,减少重复代码:

// 大端序拆分宏
#define UINT16_TO_BE(var, buf, idx) do { \
    buf[idx] = (var >> 8) & 0xFF; \
    buf[idx+1] = var & 0xFF; \
} while(0)

#define UINT32_TO_BE(var, buf, idx) do { \
    buf[idx] = (var >> 24) & 0xFF; \
    buf[idx+1] = (var >> 16) & 0xFF; \
    buf[idx+2] = (var >> 8) & 0xFF; \
    buf[idx+3] = var & 0xFF; \
} while(0)

// 使用宏构建数组
unsigned char data[9];
data[0] = 0xF0;
UINT16_TO_BE(var_2byte, data, 1);
data[3] = var_1byte;
UINT32_TO_BE(var_4byte, data, 4);
data[8] = 0x0F;

关键注意事项

  • 字节序必须匹配协议:和通信设备约定好是大端还是小端,否则数据解析会出错。
  • 数组长度要准确:计算好固定字节和可变字节的总长度,避免数组越界。
  • 变量类型匹配:用对应长度的无符号类型(如unsigned short对应2字节),防止移位时出现符号位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:05:21