gpt4 book ai didi

c++ - API 为 IP 返回 "incorrect"值,但如果您添加 256 或将负数输入 uchar,它就可以工作。发生了什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:36 27 4
gpt4 key购买 nike

例子:printf("%d %d\n", ip[0],ip[1]); 将打印 -64、-88。如果你加上 256 得到 192 168无符号字符 a = -64; printf("%d", a); 将打印 192。知道发生了什么吗?

ip[] 是一个字符数组,就其值(value)而言。

最佳答案

Plain char 具有实现定义的签名,在您的情况下 signed

因为 printf 是可变参数函数,所以应用默认提升,这意味着您的 char 被提升为 int,保留值。

除非你告诉 printf 你传递了一个 unsigned char,它会认为它是一个 intunsigned int 并且不能撤销这些提升,含义:192 因为 char 是 -64 因为 int 是 -64 解释为无符号是 4294967195。

对于 unsigned char,正确的格式说明符是 "%hhu"

顺便说一句:具体数字假设CHAR_BIT==8, sizeof(int)==4, 2s-complement representation

关于c++ - API 为 IP 返回 "incorrect"值,但如果您添加 256 或将负数输入 uchar,它就可以工作。发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com