3

例如,考虑具有这种类型的十六进制字符串:

char hex_str[100] = "0x01 0x03 0x04 0x0A";

如何从这个字符串中取出 CAPL 中的字节数组表示,例如:

byte hex_str_as_byte_arr[4] = {0x01, 0x03, 0x04, 0x0A};

编辑:只允许 Vector CANoe 支持的数据类型/功能!

4

3 回答 3

1

用于strtok将字符数组拆分为单独的十六进制字符串,然后用于long strtol( const char *restrict str, char **restrict str_end, int base )将每个十六进制字符串转换为整数值。

于 2018-11-15T17:54:08.053 回答
1

感谢所有人...实际上我自己找到了解决方案:

  char hex_str[100] = "0x01 0x03 0x04 0x0A";
  long data[4];
  dword pos = 0;

  pos = strtol(hex_str, pos, data[0]);
  pos = strtol(hex_str, pos, data[1]);
  pos = strtol(hex_str, pos, data[2]);
  pos = strtol(hex_str, pos, data[3]);

  write("0x%02x,0x%02x,0x%02x, 0x%02x", data[0], data[1], data[2], data[3]);

现在它是一个简单的演员表:(byte) data[0]

于 2018-11-15T18:34:36.357 回答
0

我们可以使用sscanf()将数字转换为unsigned char. 在循环中,我们还需要使用%n转换来确定下一次迭代的读取位置。

这是一个简单的示例(在现实生活中,您需要进行一些范围检查以确保不会超出输出缓冲区):

#include <stdio.h>

int main(void)
{
    const char hex_str[100] = "0x01, 0x03, 0x04, 0x0A";
    unsigned char bytes[4];

    {
        int position;
        unsigned char *b = bytes;

        for (const char *input = hex_str;  sscanf(input, "%hhi, %n", b, &position) == 1;  ++b) {
            input += position;
        }
    }

    /* prove we did it */
    for (size_t i = 0;  i < sizeof bytes;  ++i) {
        printf("%hhu ", bytes[i]);
    }
    puts("");
}
于 2018-11-15T18:07:53.480 回答