我正在从套接字接收一些数据。
之后,我想在接收到的字符数组中打印一个字节。
下面是我使用的代码:
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
最佳答案
如果您只想打印 2 个半字节,请使用:
printf("Pos1 = %02x.\n", (unsigned)(unsigned char)buf[17]);
/* ^^ */
/* Print 2 nibbles with 0 prefix if required */
在某些系统上,char
可能表现为signed char
,并且您会看到前面加上 ff
以显示负数。因此,在此类系统上,您必须将 buf[i]
转换为 unsigned char
。第二个无符号用于将参数类型与说明符 %x
关于c - 类型转换为 char 后打印单个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42135568/