打印无符号字符指针内部的值

6

unsigned char流的作用是什么。

如果我有一个如下所示的unsigned char流,如何打印其中的值。

对于普通的字符流或字符串,我可以使用%s进行打印,但这个怎么办。

提前感谢。

unsigned char *ptr ="(some value)"

%s会正常工作。另外,一般情况下char可能是有符号的,也可能是无符号的。 - Keith
@Keith和KarthikT不是类型不匹配和转换说明符未定义行为吗? - user529758
2
@H2CO3。正确。但是%s仅需要“字符类型的数组”,可以是char、signed char或unsigned char - Keith
@H2CO3:C.11 §7.21.6.1 关于 s如果没有 l 长度修饰符,则参数应该是指向字符类型数组初始元素的指针。 - jxh
2个回答

8
当涉及字符串处理时,unsigned char和普通的char之间没有明显的区别。后者可以是有符号的也可以是无符号的,这是实现定义的。但是,所有的符号表始终具有正索引。因此,当您处理字符串时,您始终可以安全地在unsigned charchar之间进行转换。(标准中这两种类型之间的指针强制转换被严格定义为行为不良,但实际上,在任何系统上都可以正常工作。)
因此,printf("%s", ptr);将正常工作。

3

一个无符号字符数组通常表示原始字节数据,如果您想使用%s将其输出为字符串,那么您可能会得到一些无意义的乱码字符。

如果您真的希望查看这些值,我建议将单个字节转换为short,然后使用%i输出它。

仅代表个人观点。


1
同意。你应该考虑未来使用无符号字符指针的情况——你将使用它与常规C字符串还是与“原始内存”字节一起使用?提前规划并使用适当的类型可以确保编译器能够捕获可能错误的类别。 - Jongware
如果我知道它被用作字节数据,那么我会使用%x。 - Jess

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接