在C中解析十六进制字符串命令

问题描述 投票:1回答:1

嗨,我试图将十六进制命令写入串行端口,在此我需要将十六进制字符串转换为C中的特定字节数组格式,但解析转义字符时遇到问题。请帮助实现以下功能。谢谢。

  int hex2byte(char* str)
    {
       //code to parse this string into byte array removing escape character and keeping other special character as it is
       // resize str, In this case it resize strlen(str)=14 bytes into 5 bytes array; 
       // Goal is to Fill the str in this desired way
       //   str = {0x02, 0x00, ';' ,';', 0x03};
       //      Or
       //  str = {0x02, 0x00, 0x3b ,0x3b, 0x03};

        return size_of_str;
    }

int main()
{ 
   char* str ="\x02\x00;;\x03"
   int size=hex2byte(str);
   for (int i=0; i<size;i++)
       printf("0x%02x\n", str[i]);

return 0;
}

所需的输出:0x02 0x00 0x3b 0x3b 0x03

c
1个回答
1
投票

似乎您误会了str中的开头。

之后

char* str ="\x02\x00;;\x03";

[str指向存储以下值的存储位置:

0x02 0x00 0x3B 0x3B 0x03 0x00
                         ^^^^
                         Zero termination

正是您需要的。因此,您不需要转换任何数据的函数。数据已经具有正确的值。

您的问题是,您找不到大小,因为\x00在字符串中间放置了一个终止符。无法使用char*解决此问题。函数hex2byte(char* str)无法确定您的示例中有5个字节。

您需要一个固定大小的数组或一个硬编码的大小。但是,如果使用固定大小的数组,则根本不需要该函数。

请参见https://ideone.com/bSUeOb以获取正在运行的示例

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