我正在编写一个与串口通信的小程序。我使用其中一行来使程序正常工作;
unsigned char send_bytes[] = { 0x0B, 0x11, 0x00, 0x02, 0x00, 0x69, 0x85, 0xA6, 0x0e, 0x01, 0x02, 0x3, 0xf };
然而,要发送的字符串是可变的,所以我想制作这样的东西;
char *blahstring;
blahstring = "0x0B, 0x11, 0x00, 0x02, 0x00, 0x69, 0x85, 0xA6, 0x0e, 0x01, 0x02, 0x3, 0xf"
unsigned char send_bytes[] = { blahstring };
它不会给我一个错误,但它也不起作用..任何想法?
答案 0 :(得分:7)
字节字符串是这样的:
char *blahString = "\x0B\x11\x00\x02\x00\x69\x85\xA6\x0E\x01\x02\x03\x0f"
另外,请记住,这不是常规字符串。如果您明确地将其声明为具有特定大小的字符数组,那将是明智的:
像这样:
unsigned char blahString[13] = {"\x0B\x11\x00\x02\x00\x69\x85\xA6\x0E\x01\x02\x03\x0f"};
unsigned char sendBytes[13];
memcpy(sendBytes, blahString, 13); // and you've successfully copied 13 bytes from blahString to sendBytes
不是你定义的方式..
编辑:
要回答为什么你的第一个send_bytes
有效,第二个不是这个:
第一个,创建一个单独的字节数组。其中,第二个,创建一串ascii characteres。因此,第一个send_bytes
的长度为13个字节,其中第二个send_bytes
的长度要高得多,因为字节序列与第二个blahstring
中的单个字符的ascii等价。
答案 1 :(得分:0)
blahstring
是一串字符。
第1个字符为0,第2个字符为x,第3个字符为0,第4个字符为B等。所以该行
unsigned char send_bytes[] = { blahstring };
是一个数组(假设你预先形成一个演员!)将有一个项目。
但是有效的例子是一个数组,第一个字符的值为0x0B,第二个字符的值为0x11。