我使用Qt串行通过串行端口发送命令。该命令包含一个带符号的16位整数(xx),范围从-4096到4096,高字节先发送。命令创建如下:
int16_t xi = 0;
for (int i=0; i<280; i++){
xi = i;
// index = 0 1 2 3 4 5
// command = {'A','w','x','x','L','H'}
unsigned char command[6] = {'A','w','x','x','L','H'};
command[2] = xi >> 8;
command[3] = xi & 0xFF;
int len = strlen((char*)command);
qDebug()<<"strlen: "<<len;
}
该命令对于除0到256之间的所有值都可以正常工作。我不明白为什么0到256之间的值的字符串长度为2?我做错了什么?任何帮助表示赞赏。
编辑:如何更改command[2] = xi >> 8;
(或其他部分)以避免被截断并获得-4096到4096之间所有整数的完整命令?
答案 0 :(得分:1)
根本问题在command[2] = xi >> 8;
部分。
当将数组的第3个元素右移8位时,它作为int
(空终止符)变为0。完成该操作后,strlen
返回2,因为第三个元素是空终止符。由于256之后,向右移8位不会使值变为0,因此strlen
会按预期工作。但是,该行为是不确定的,因为strlen
期望您的字符串以null结尾。