Tag: 类型转换

c语言中%d和%p printf格式字符串指令之间的区别?

我想详细解释使用%d和%p类型来printing pointer之间的区别。 另外为什么%p返回hex? 当%d和%p返回不同的值时会出现什么情况? 数据类型是否仅表示用户想要输出的方式,还是与内存位置有关?

为什么printf打印错误的值?

当我使用printf(“%f\n”, myNumber)打印int时,为什么会得到错误的值? 我不明白为什么它用%d打印好,但不用%f打印。 它不应该只是添加额外的零? int a = 1; int b = 10; int c = 100; int d = 1000; int e = 10000; printf(“%d %d %d %d %d\n”, a, b, c, d, e); //prints fine printf(“%f %f %f %f %f\n”, a, b, c, d, e); //prints weird stuff

如何在C中正确地将hex字符串转换为字节数组?

我需要将包含hex值的字符串转换为字节数组。 虽然这已经在这里作为第一个答案回答了,但我收到以下错误: warning: ISO C90 does not support the ‘hh’ gnu_scanf length modifier [-Wformat] 因为我不喜欢警告,而且遗漏hh只会产生另一个警告 warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 3 has type ‘unsigned char *’ [-Wformat] 我的问题是:如何做到这一点? 为了完成,我再次在这里发布示例代码: #include int main(int argc, char **argv) { const char hexstring[] = “deadbeef10203040b00b1e50”, *pos = hexstring; unsigned char val[12]; size_t […]

如何在C中将字节数组转换为double?

我有一个包含8个字节的字节数组,并希望转换并将它们用作双精度二进制浮点数。 有人可以告诉我如何转换它?

隐式类型促销规则

本文旨在用作关于C中隐式整数提升的常见问题解答,特别是由通常的算术转换和/或整数提升引起的隐式提升。 例1) 为什么这会给出一个奇怪的,大整数而不是255? unsigned char x = 0; unsigned char y = 1; printf(“%u\n”, x – y); 例2) 为什么这会给“-1大于0”? unsigned int a = 1; signed int b = -2; if(a + b > 0) puts(“-1 is larger than 0”); 例3) 为什么更改上面示例中的类型以short解决问题? unsigned short a = 1; signed short b = -2; if(a + b > […]

整数转换(缩小,扩展),未定义的行为

我很难以我能够轻易理解的方式找到关于这个主题的信息,所以我要求对我发现的内容进行审查。这只是转换和转换的全部内容。 在示例中,我将指的是: (signed/unsigned) int bigger; (signed/unsigned) char smaller; 截断整数。 (超大化>小) 首先在MSB端截断 bigger以匹配smaller尺寸。 第二,根据较小的类型将截断的结果转换为有符号/无符号 。 如果较大的值太大而不适合较小的类型,则会导致不确定的行为(纠正我)。 但是我的规则应该是在所有机器上工作(对此也是正确的),结果应该是可预测的。 加宽整数(小 – >更大) a) signed char – > signed int 使用MSB(1或0)前置较小以匹配较大的大小 转换为签名 b) signed char – > unsigned int 使用MSB(1或0)前置较小以匹配较大的大小。 转换为无符号 c) unsigned char – > signed int 以0为前缀以匹配更大的尺寸 转换为签名 d) unsigned char – > unsigned int 以0为前缀以匹配更大的尺寸 转换为无符号 […]