c 从套接字接收到无符号字符数组时的意外输出
c unexpected output when recv from socket to a unsigned char array
我在 c 中解析了来自 websocket 的以下数据包负载。
81 82 ce 5d 4d ac bf 57
我收到了一个像这样的无符号字符数组。
unsigned char array[256];
recv(new_socket, array, sizeof(array),0);
但是当我遍历它来检查它时,它变得很奇怪...
while(i != 256){
printf("%x\n", array[i]);
i++;
}
#output:
81
82
ce
5d
4d
ac
bf
57
40
0
0
0
0
0
0
0
40
... more zeros and bad hexes
看起来前几个没问题,但后来开始向我的 buf 添加空值和随机奇怪的十六进制。这对我来说似乎很简单,但我是新手。你们能帮我解决一下吗?
假设您使用的是标准 recv function from Linux,函数 return 是一个 ssize_t
类型的值,指定它接收了多少字节。您应该查看 return 值并只打印那么多字节。如果您打印的字节数多于此,那么您只是从数组中打印未初始化的字节,因此它们可以是任何内容。
您可以通过在定义数组时用零初始化数组来使输出更清晰并帮助避免未定义的行为:
unsigned char array[256] = {};
我在 c 中解析了来自 websocket 的以下数据包负载。
81 82 ce 5d 4d ac bf 57
我收到了一个像这样的无符号字符数组。
unsigned char array[256];
recv(new_socket, array, sizeof(array),0);
但是当我遍历它来检查它时,它变得很奇怪...
while(i != 256){
printf("%x\n", array[i]);
i++;
}
#output:
81
82
ce
5d
4d
ac
bf
57
40
0
0
0
0
0
0
0
40
... more zeros and bad hexes
看起来前几个没问题,但后来开始向我的 buf 添加空值和随机奇怪的十六进制。这对我来说似乎很简单,但我是新手。你们能帮我解决一下吗?
假设您使用的是标准 recv function from Linux,函数 return 是一个 ssize_t
类型的值,指定它接收了多少字节。您应该查看 return 值并只打印那么多字节。如果您打印的字节数多于此,那么您只是从数组中打印未初始化的字节,因此它们可以是任何内容。
您可以通过在定义数组时用零初始化数组来使输出更清晰并帮助避免未定义的行为:
unsigned char array[256] = {};