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

如何在C语言中给char数组末尾追加CRC16值?

解决CRC16值转ASCII字符并追加到字符串的方法

核心思路

unsigned short类型的CRC16是16位数据,可拆分为高8位字节和低8位字节,每个字节直接对应一个ASCII字符(ASCII本质是0-255的字节值),将这两个字符追加到目标字符串末尾即可满足格式要求。

具体实现(C语言示例)

假设你已有计算CRC16的函数,以下是完整的拼接逻辑:

#include <stdio.h>
#include <string.h>

// 示例CRC16函数(替换为你实际的实现)
unsigned short crc16(const unsigned char *data, size_t len) {
    // 这里是你的CRC16计算逻辑,示例返回0x4142(对应ASCII 'A'和'B')
    return 0x4142;
}

int main() {
    // 初始数据缓冲区,需预留足够空间存放CRC字符和\r
    char send_buffer[256] = ",,,,...";
    size_t data_len = strlen(send_buffer);
    
    // 计算初始数据的CRC16值
    unsigned short crc_result = crc16((unsigned char*)send_buffer, data_len);
    
    // 拆分CRC为高8位和低8位字节
    unsigned char crc_high_byte = (crc_result >> 8) & 0xFF;
    unsigned char crc_low_byte = crc_result & 0xFF;
    
    // 追加CRC字符和\r到缓冲区
    send_buffer[data_len++] = crc_high_byte;
    send_buffer[data_len++] = crc_low_byte;
    send_buffer[data_len++] = '\r';
    send_buffer[data_len] = '\0'; // 确保字符串以结束符收尾
    
    // 输出结果(实际场景中替换为发送逻辑)
    printf("待发送数据: %s\n", send_buffer);
    return 0;
}

关键细节说明

  • 字节拆分:通过右移8位(crc_result >> 8)获取高8位,再用& 0xFF确保只保留低8位;直接用& 0xFF获取低8位。
  • 缓冲区安全:必须确保send_buffer的大小足够容纳初始数据、2个CRC字符、\r以及字符串结束符\0,避免缓冲区溢出。
  • 字符映射:如果CRC字节值落在ASCII可打印范围内(32-126),会显示对应字符;若为不可打印字符(如控制字符),也可正常作为字节发送,不影响传输(仅显示时可能为乱码)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:25