簡體   English   中英

如何在CAPL中將十六進制字符串轉換為字節數組?

[英]How to convert hex string to byte array in CAPL?

例如,考慮到這種類型的十六進制字符串:

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

如何從這個字符串中取出 CAPL 中的字節數組表示,例如:

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

編輯:只允許使用 Vector CANoe 支持的數據類型/函數!

使用strtok將字符數組拆分為單獨的十六進制字符串,然后使用long strtol( const char *restrict str, char **restrict str_end, int base )將每個十六進制字符串轉換為整數值。

感謝所有人......實際上我自己找到了一個解決方案:

  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]

我們可以使用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("");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM