如何在 C 中将 crc16 值附加到 char 数组的末尾?

问题描述 投票:0回答:2

我有一些数据需要作为字符串连同 crc16 值一起发送。格式是这样的: ",,,...,crc16 “ 我有一个 crc16 函数,我将数据作为字符数组传递给它,crc 结果作为无符号短整数返回。我无法弄清楚如何将 crc 值附加到字符串,因为它与字符串的其余部分具有不同的数据类型。

我想我可能需要将 crc 转换为 2 个 ascii 字符。虽然不知道该怎么做

arrays c string pointers crc16
2个回答
1
投票

我会在这里做一些猜测:

  • 您的 CRC 值应附加到您的 ascii 字符串as ascii 字符串,可能以十六进制表示。

这里是一个简单的代码,用于复制字符串并将其附加计算出的 CRC 值:

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

int main(void) {
    uint16_t crc = 0xBEEF;
    char message[] = "Blah blah.";
    char output[100]; // Make sure it has enough space for both, 
                      //the string and the CRC (and the null terminator).
    
    sprintf(output, "%s,%04X\r", message, crc);
    // For extra memory safety use
    // snprintf(output, sizeof output, "%s,%04X\r", message, crc);
    
    printf("%s\n", output);
    
    return 0;
}

根据要求,您可能需要交换 CRC 的字节..

演示


0
投票

将 CRC 分成两个字节。

unsigned high = crc >> 8, low = crc & 0xff;
。然后按偏移量将它们直接插入字符串中,例如
str[17] = low; str[18] = high;
(无论正确的索引是什么),或者如果您使用
printf()
来制作字符串,那么就像
printf("... %c%c\r", ..., low, high);
.

© www.soinside.com 2019 - 2024. All rights reserved.