任何可用于 C 中无符号字符指针行为的文档? [复制]

Posted

技术标签:

【中文标题】任何可用于 C 中无符号字符指针行为的文档? [复制]【英文标题】:Any documentaion available for behaviour of unsigned char pointer in C? [duplicate] 【发布时间】:2020-06-29 11:06:09 【问题描述】:

什么是无符号字符指针,它与 C 中的字符指针有何不同?

关于 C 中 unsigned char 指针的信息不多,如何打印 unsigned char 指针指向的数据?

对此的任何解释都会有所帮助。

【问题讨论】:

问题出在您未显示的代码行中。否则消息很清楚:%d 期望一个 int,而您提供一个 unsigned int*。这是未定义的行为(google that) 刚刚添加了一个示例 c 代码 sn-p : unsigned char* temp;温度= 133+2; printf("%d",temp); 你可能打算这样做printf("%u",(unsigned int)*temp); 我认为您应该阅读 C 教科书中有关指针的章节。 char* temp; temp= 133+2; 毫无意义,也许你的意思是char temp; temp= 133+2; @Lundin 我不这么认为,看第二条评论里他的代码sn-p 【参考方案1】:

如何打印unsigned char* p指向的数据?

这完全取决于数据格式。以及你真正想要的和你需要的。

它只是一个已知长度的二进制 blob 吗? 那么你可能想要一个 hexdump。搜索一下,虽然很常见,但不是内置的,有很多选择。

它真的是一个空终止的字符串吗? 转换为char* 后使用%s 打印。

它只是一个unsigned char吗? 取消引用后使用%hhu 打印。

确实没有足够的信息来判断需要什么。

【讨论】:

【参考方案2】:

假设你有类似的东西

unsigned char *p = something;

然后

printf( “p = %p\n”, (void *)p );

打印指针本身的值,而

printf( “*p = %hhu\n”, *p );

p 指向的值打印为十进制整数(无符号)。

【讨论】:

不太确定这是否是正确答案。我怀疑 OP 甚至不知道指针是什么,但是如果没有更多信息就很难判断【参考方案3】:

文档在这里:https://linux.die.net/man/3/printf

unsigned char x = 0x4d;
unsigned char *y = &x;

printf("pointer: %p, %hhu\n", (void *)y, *y);

endianess 无关紧要,因为sizeof(unsgined char) id 始终为 1。

如果您想通过指针对类型进行双关语 - 这通常是个坏主意。

【讨论】:

不太确定这是否是正确的答案,显然 OP 提供了指针而不是值,但没有看到他的代码就很难说。

以上是关于任何可用于 C 中无符号字符指针行为的文档? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

c中无符号(unsigned)和有符号(signed)两种类型。

JavaScript中无符号右移赋值操作

如何声明 constexpr C 字符串?

如何在laravel中无任何顺序地调用带有命名参数的sp

C 语言数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

c中带有无符号字符的空指针