【发布时间】:2017-06-27 09:30:05
【问题描述】:
我正在从套接字接收一些数据。
之后,我想在接收到的 char 数组中打印一个字节。
下面是我使用的代码:
char buf[100];
int i = 0;
while (1)
{
rc = recv(socket_fd, buf, sizeof(buf), 0);
if (rc > 0)
{
printf("Pos1 = %x.\n", (char)buf[17]);
printf("Pos2 = %x.\n", (char)buf[22]);
}
}
但这会打印出 4 个字节。如果我将字符类型转换为 unsigned char,则会打印单字节。那么这两种类型转换有什么区别,导致打印的字节数不同。
输出:
Pos1 = 1
Pos2 = ffffff83
【问题讨论】:
-
你为什么使用
%x?你需要十六进制值吗? -
是的。我希望以十六进制打印值。
-
分享您的输出。你是如何确定它正在打印 4 个字节的?
-
%x用于unsigned int。传递负字符会导致未定义的行为 -
你怎么知道
rc > 22,所以buf[22]有有效数据?您只测试是否至少有 1 个char读取。
标签: c casting char unsigned-char