回答
我假定你的意思uint32_t
,使包括inttypes.h和使用
printf("Value: %" PRIu32 "\n", u32);
缺少“%”号 – FredK
@chqrlie它没有 –
没有标准型U32
。
假设它是一个整数类型,可能是一个32位无符号类型的typedef,您可以安全地打印出值是这样的:
printf("%lu\n", (unsigned long)u32);
我用unsigned long
而不是unsigned int
因为unsigned int
可以合法仅16位宽。 unsigned long
保证至少为32位宽,因此它可以保存u32
类型的任何可能的值(假设u32
被定义为理智的)。对于64位无符号类型,您可以安全使用unsigned long long
和"%llu"
。
从C99开始,标准C库包含一个标头<stdint.h>
,该标头定义了固定宽度类型,包括uint32_t
,它可能与U32
的属性相同。我不建议对工作代码进行大规模修改,只是使用标准化的typedef,但在新代码中,您应该使用uint32_t
。标准头<inttypes.h>
定义宏的使用与printf
,让你写,为iharob's answer suggests:
uint32_t u32;
printf("%" PRIu32 "\n", u32);
(PRIu32
扩展为一个字符串;三个文字"%"
,PRIu32
和"\n"
是由编译器连接在一起。)
虽然我个人发现宏名称(记录在N1570第7.8节)难以记忆。我经常只是将其转换为我知道的足够宽的预定义类型,如上所示。
当不确定使用什么格式说明打印一些整数:
如果类型在C像
int, unsigned long long, size_t, uint8_t
等指定类型,最好先使用的匹配符"%d", "%llu", "%zu", "%" PRIu8
等众多资源列出相应的类型为说明符。#include <inttypes.h> printf("%" PRIu32 "\n", u32); // type known to be 32-bit unsigned - no padding.
当类型的标准类型的关系不明确,但其正负号的烦躁是已知的,代码可转换为相应的宽型。
#include <stdint.h> printf("%ju\n", (uintmax_t) u32); // type is known to be some unsigned integer
- 1. 用printf在c
- 2. C++用的printf
- 3. 的printf在用C
- 4. 用printf
- 5. C++ printf舍入?
- 6. c printf signed float
- 7. C编程printf
- 8. C stdout printf
- 9. C - 使用%s和char重复printf()*
- 10. 使用%d和%f的C printf
- 11. 在printf中使用语句体C
- 12. 不与FUNC printf的理解用C
- 13. 如何用printf
- 14. C++的cout像C的printf
- 15. 打印 '%' 与C的printf/C++
- 16. C printf格式化
- 17. 的printf使用%d
- 18. 不使用printf()的
- 19. 用printf和格式
- 20. 为什么用printf
- 21. 转换一个C的printf(%C)到C#
- 22. C/Unix使用系统调用和printf的奇怪行为
- 23. C++的printf用%F,但本地化为用户的国家
- 24. 直接参数访问不起作用,在C中使用printf
- 25. printf在C中的错误
- 26. printf与前导零在C
- 27. 在printf中的-NNN C
- 28. C - long double和printf问题
- 29. C - printf(“%s”)显示符号
- 30. C删除printf输出
u32是什么类型的?它是如何声明的? –
产生了什么错误? – rici
给***什么***错误?你没有注意到'u32''中的语法错误吗?我确定编译器确实如此。你建议的cast((int)u32')无论如何都是错误的:'%u'是* unsigned *。 –