c - 类型转换为 char 后打印单个字节

标签 c casting char unsigned-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

最佳答案

如果您只想打印 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

进行匹配

Working example

关于c - 类型转换为 char 后打印单个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42135568/

相关文章:

c - 如果程序以 exec 运行则没有颜色输出

c - execl() 不工作/打印

c - 类型转换实际上有什么作用吗?

java - 尝试使用转换时出错,java

c - 为 shell 程序标记 char*

c - gets 和 scanf 有什么区别?

c - 转置函数,十进制转二进制

通过char元素插入C二叉搜索树

c# - 如何从 LinkedList<T> 中提取 LinkedListNode<T>

scanf时与char数组混淆