任何可用于 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)两种类型。
C 语言数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )