嗨,我试图将十六进制命令写入串行端口,在此我需要将十六进制字符串转换为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
似乎您误会了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以获取正在运行的示例