今天偶然间看到这个头文件inttypes,好奇有什么用,去找度娘玩了一波,发现这头文件挺有意思的。

  这个头文件适配于C99标准,它提供整数输入的各种进制转换的宏,这是在Ubuntu上扣下来的代码(windows里我没找到放在哪)嗯~ o(* ̄▽ ̄*)o我拿VScode找到了……所以划掉

  不完整的

Ubuntu:

  1. //这里应该是10进制的宏
  2. /* Decimal notation. */
  3. # define PRId8 "d"
  4. # define PRId16 "d"
  5. # define PRId32 "d"
  6. # define PRId64 __PRI64_PREFIX "d"
  7.  
  8. # define PRIdLEAST8 "d"
  9. # define PRIdLEAST16 "d"
  10. # define PRIdLEAST32 "d"
  11. # define PRIdLEAST64 __PRI64_PREFIX "d"
  12.  
  13. # define PRIdFAST8 "d"
  14. # define PRIdFAST16 __PRIPTR_PREFIX "d"
  15. # define PRIdFAST32 __PRIPTR_PREFIX "d"
  16. # define PRIdFAST64 __PRI64_PREFIX "d"
  17.  
  18. # define PRIi8 "i"
  19. # define PRIi16 "i"
  20. # define PRIi32 "i"
  21. # define PRIi64 __PRI64_PREFIX "i"
  22.  
  23. # define PRIiLEAST8 "i"
  24. # define PRIiLEAST16 "i"
  25. # define PRIiLEAST32 "i"
  26. # define PRIiLEAST64 __PRI64_PREFIX "i"
  27.  
  28. # define PRIiFAST8 "i"
  29. # define PRIiFAST16 __PRIPTR_PREFIX "i"
  30. # define PRIiFAST32 __PRIPTR_PREFIX "i"
  31. # define PRIiFAST64 __PRI64_PREFIX "i"
  32.  
  33. //感觉这里是8进制的宏
  34. /* Octal notation. */
  35. # define PRIo8 "o"
  36. # define PRIo16 "o"
  37. # define PRIo32 "o"
  38. # define PRIo64 __PRI64_PREFIX "o"
  39.  
  40. # define PRIoLEAST8 "o"
  41. # define PRIoLEAST16 "o"
  42. # define PRIoLEAST32 "o"
  43. # define PRIoLEAST64 __PRI64_PREFIX "o"
  44.  
  45. # define PRIoFAST8 "o"
  46. # define PRIoFAST16 __PRIPTR_PREFIX "o"
  47. # define PRIoFAST32 __PRIPTR_PREFIX "o"
  48. # define PRIoFAST64 __PRI64_PREFIX "o"
  49.  
  50. //这里因该是无符号的宏
  51. /* Unsigned integers. */
  52. # define PRIu8 "u"
  53. # define PRIu16 "u"
  54. # define PRIu32 "u"
  55. # define PRIu64 __PRI64_PREFIX "u"
  56.  
  57. # define PRIuLEAST8 "u"
  58. # define PRIuLEAST16 "u"
  59. # define PRIuLEAST32 "u"
  60. # define PRIuLEAST64 __PRI64_PREFIX "u"
  61.  
  62. # define PRIuFAST8 "u"
  63. # define PRIuFAST16 __PRIPTR_PREFIX "u"
  64. # define PRIuFAST32 __PRIPTR_PREFIX "u"
  65. # define PRIuFAST64 __PRI64_PREFIX "u"
  66.  
  67. //这里因该是小写16进制
  68. /* lowercase hexadecimal notation. */
  69. # define PRIx8 "x"
  70. # define PRIx16 "x"
  71. # define PRIx32 "x"
  72. # define PRIx64 __PRI64_PREFIX "x"
  73.  
  74. # define PRIxLEAST8 "x"
  75. # define PRIxLEAST16 "x"
  76. # define PRIxLEAST32 "x"
  77. # define PRIxLEAST64 __PRI64_PREFIX "x"
  78.  
  79. # define PRIxFAST8 "x"
  80. # define PRIxFAST16 __PRIPTR_PREFIX "x"
  81. # define PRIxFAST32 __PRIPTR_PREFIX "x"
  82. # define PRIxFAST64 __PRI64_PREFIX "x"
  83.  
  84. //这里因该是大写16进制
  85. /* UPPERCASE hexadecimal notation. */
  86. # define PRIX8 "X"
  87. # define PRIX16 "X"
  88. # define PRIX32 "X"
  89. # define PRIX64 __PRI64_PREFIX "X"
  90.  
  91. # define PRIXLEAST8 "X"
  92. # define PRIXLEAST16 "X"
  93. # define PRIXLEAST32 "X"
  94. # define PRIXLEAST64 __PRI64_PREFIX "X"
  95.  
  96. # define PRIXFAST8 "X"
  97. # define PRIXFAST16 __PRIPTR_PREFIX "X"
  98. # define PRIXFAST32 __PRIPTR_PREFIX "X"
  99. # define PRIXFAST64 __PRI64_PREFIX "X"

Windows:

  1. /* fprintf macros for signed types */
  2. #define PRId8 "d"
  3. #define PRId16 "d"
  4. #define PRId32 "d"
  5. #define PRId64 "I64d"
  6.  
  7. #define PRIdLEAST8 "d"
  8. #define PRIdLEAST16 "d"
  9. #define PRIdLEAST32 "d"
  10. #define PRIdLEAST64 "I64d"
  11.  
  12. #define PRIdFAST8 "d"
  13. #define PRIdFAST16 "d"
  14. #define PRIdFAST32 "d"
  15. #define PRIdFAST64 "I64d"
  16.  
  17. #define PRIdMAX "I64d"
  18. #define PRIdPTR "d"
  19.  
  20. #define PRIi8 "i"
  21. #define PRIi16 "i"
  22. #define PRIi32 "i"
  23. #define PRIi64 "I64i"
  24.  
  25. #define PRIiLEAST8 "i"
  26. #define PRIiLEAST16 "i"
  27. #define PRIiLEAST32 "i"
  28. #define PRIiLEAST64 "I64i"
  29.  
  30. #define PRIiFAST8 "i"
  31. #define PRIiFAST16 "i"
  32. #define PRIiFAST32 "i"
  33. #define PRIiFAST64 "I64i"
  34.  
  35. #define PRIiMAX "I64i"
  36. #define PRIiPTR "i"
  37.  
  38. #define PRIo8 "o"
  39. #define PRIo16 "o"
  40. #define PRIo32 "o"
  41. #define PRIo64 "I64o"
  42.  
  43. #define PRIoLEAST8 "o"
  44. #define PRIoLEAST16 "o"
  45. #define PRIoLEAST32 "o"
  46. #define PRIoLEAST64 "I64o"
  47.  
  48. #define PRIoFAST8 "o"
  49. #define PRIoFAST16 "o"
  50. #define PRIoFAST32 "o"
  51. #define PRIoFAST64 "I64o"
  52.  
  53. #define PRIoMAX "I64o"
  54.  
  55. #define PRIoPTR "o"
  56.  
  57. /* fprintf macros for unsigned types */
  58. #define PRIu8 "u"
  59. #define PRIu16 "u"
  60. #define PRIu32 "u"
  61. #define PRIu64 "I64u"
  62.  
  63. #define PRIuLEAST8 "u"
  64. #define PRIuLEAST16 "u"
  65. #define PRIuLEAST32 "u"
  66. #define PRIuLEAST64 "I64u"
  67.  
  68. #define PRIuFAST8 "u"
  69. #define PRIuFAST16 "u"
  70. #define PRIuFAST32 "u"
  71. #define PRIuFAST64 "I64u"
  72.  
  73. #define PRIuMAX "I64u"
  74. #define PRIuPTR "u"
  75.  
  76. #define PRIx8 "x"
  77. #define PRIx16 "x"
  78. #define PRIx32 "x"
  79. #define PRIx64 "I64x"
  80.  
  81. #define PRIxLEAST8 "x"
  82. #define PRIxLEAST16 "x"
  83. #define PRIxLEAST32 "x"
  84. #define PRIxLEAST64 "I64x"
  85.  
  86. #define PRIxFAST8 "x"
  87. #define PRIxFAST16 "x"
  88. #define PRIxFAST32 "x"
  89. #define PRIxFAST64 "I64x"
  90.  
  91. #define PRIxMAX "I64x"
  92. #define PRIxPTR "x"
  93.  
  94. #define PRIX8 "X"
  95. #define PRIX16 "X"
  96. #define PRIX32 "X"
  97. #define PRIX64 "I64X"
  98.  
  99. #define PRIXLEAST8 "X"
  100. #define PRIXLEAST16 "X"
  101. #define PRIXLEAST32 "X"
  102. #define PRIXLEAST64 "I64X"
  103.  
  104. #define PRIXFAST8 "X"
  105. #define PRIXFAST16 "X"
  106. #define PRIXFAST32 "X"
  107. #define PRIXFAST64 "I64X"
  108.  
  109. #define PRIXMAX "I64X"
  110. #define PRIXPTR "X"
  111.  
  112. /*
  113. * fscanf macros for signed int types
  114. * NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t
  115. * (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have
  116. * no length identifiers
  117. */
  118.  
  119. #define SCNd16 "hd"
  120. #define SCNd32 "d"
  121. #define SCNd64 "I64d"
  122.  
  123. #define SCNdLEAST16 "hd"
  124. #define SCNdLEAST32 "d"
  125. #define SCNdLEAST64 "I64d"
  126.  
  127. #define SCNdFAST16 "hd"
  128. #define SCNdFAST32 "d"
  129. #define SCNdFAST64 "I64d"
  130.  
  131. #define SCNdMAX "I64d"
  132. #define SCNdPTR "d"
  133.  
  134. #define SCNi16 "hi"
  135. #define SCNi32 "i"
  136. #define SCNi64 "I64i"
  137.  
  138. #define SCNiLEAST16 "hi"
  139. #define SCNiLEAST32 "i"
  140. #define SCNiLEAST64 "I64i"
  141.  
  142. #define SCNiFAST16 "hi"
  143. #define SCNiFAST32 "i"
  144. #define SCNiFAST64 "I64i"
  145.  
  146. #define SCNiMAX "I64i"
  147. #define SCNiPTR "i"
  148.  
  149. #define SCNo16 "ho"
  150. #define SCNo32 "o"
  151. #define SCNo64 "I64o"
  152.  
  153. #define SCNoLEAST16 "ho"
  154. #define SCNoLEAST32 "o"
  155. #define SCNoLEAST64 "I64o"
  156.  
  157. #define SCNoFAST16 "ho"
  158. #define SCNoFAST32 "o"
  159. #define SCNoFAST64 "I64o"
  160.  
  161. #define SCNoMAX "I64o"
  162. #define SCNoPTR "o"
  163.  
  164. #define SCNx16 "hx"
  165. #define SCNx32 "x"
  166. #define SCNx64 "I64x"
  167.  
  168. #define SCNxLEAST16 "hx"
  169. #define SCNxLEAST32 "x"
  170. #define SCNxLEAST64 "I64x"
  171.  
  172. #define SCNxFAST16 "hx"
  173. #define SCNxFAST32 "x"
  174. #define SCNxFAST64 "I64x"
  175.  
  176. #define SCNxMAX "I64x"
  177. #define SCNxPTR "x"
  178.  
  179. /* fscanf macros for unsigned int types */
  180. //感觉这里是无符号
  181. #define SCNu16 "hu"
  182. #define SCNu32 "u"
  183. #define SCNu64 "I64u"
  184.  
  185. #define SCNuLEAST16 "hu"
  186. #define SCNuLEAST32 "u"
  187. #define SCNuLEAST64 "I64u"
  188.  
  189. #define SCNuFAST16 "hu"
  190. #define SCNuFAST32 "u"
  191. #define SCNuFAST64 "I64u"
  192.  
  193. #define SCNuMAX "I64u"
  194. #define SCNuPTR "u"

  我感觉gcc这个源码没有Ubuntu哪个那么容易看懂,管他呢……用法是一样的

百度上的例子:

  PRIi8、PRIu8、PRIo8以及PRIx8,其中i为有符号,u为无符号,o为8进制以及x为16进制。

百度上的代码:

  1. #include <stdio.h>
  2. #include <inttypes.h>
  3.  
  4. int main() {
  5. int a = ;
  6. printf("a=%"PRIu64"\n", a);
  7. return ;
  8. }

  输出是啥我不太明白,感觉像是按位把int 拓展成了long long 导致出现了一个特别奇怪的数

我做了其他的测试

  1. int a = ;
  2. printf("a=%"PRx8"\n", a);

输出的是 f

  1. int a = 0xff;
  2. printf("a=%"PRu8"\n", a);

输出的是255

  嘿嘿,真是个进制转换的神器,不过好像没有二进制,而且只有常用的8和16,其他的还得自己写,这个库里还有其他功能,我先研究研究,日后再更新。(现在主要是防止自己忘记)

学习不易,诸君共勉!

C语言拾遗——inttypes.h的更多相关文章

  1. C语言拾遗——strtok

    C语言拾遗——strtok 今天刷PAT的时候用到了这个strtok函数,顺手就记录一下 strtok函数包含于头文件string.h 语法:char *strtok( char *str1, con ...

  2. 使用ACE遇到无法打开包括文件:“inttypes.h”的解决方案

    本来想使用ACE_Get_Opt类来做一个命令行解析的功能,但是当项目中配置好了ACE库的路径后,编译时遇到"无法打开包括文件: inttypes.h : No such file or d ...

  3. ffmpeg遇到inttypes.h和UINT64_C

    http://blog.csdn.net/cll131421/article/details/7763657 编译过程:错误一:无法打开包括文件:“inttypes.h”: No such file ...

  4. ffmpeg “inttypes.h”: No such file or directory

    编译过程:错误一:无法打开包括文件:“inttypes.h”: No such file or directory解决方法:删除之,并在其之前添加如下代码: #if defined(WIN32) &a ...

  5. C语言拾遗(一)

    越来越体会到C语言的重要性,不管是在计算机底层的理解上,还是在算法数据结构上,所以遂决定重新拾起C语言,不定期更新一些知识点. 推荐博客:http://blog.csdn.net/itcastcpp ...

  6. C语言.c和.h

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:       1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成 ...

  7. C 语言项目中.h文件和.c文件的关系

    http://blog.csdn.net/xingkong_678/article/details/38639847 关于两者以前的关系,要从N年以前说起了~ long long ago,once a ...

  8. windows+vs2017+C语言 引入mysql.h对MYSQL数据库的操作

    mysql.h文件用作VS开发用,用来连接数据库.没有mysql.h文件,就无法调用mysql的东西 也无法用C语言对MYSQL操作. 一般安装了mysql之后,这个文件就在mysql目录的inclu ...

  9. C语言拾遗

    1. 没C++那么恶心的const C语言中的const修饰符用于修饰一个变量是const属性的.被C语言的const修饰的变量具有只读属性,并且不能被修改. const修饰的变量 != 常量,con ...

随机推荐

  1. 启动storm任务时,异常提示

    启动storm任务时,异常提示: 14182 [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2000] WARN o.a.s.s.o.a.z.s.NIOServerCnx ...

  2. 「Luogu P3072 [USACO13FEB]周长Perimeter」

    USACO的题目,感觉还是挺神奇的. 前置芝士 DFS(BFS)遍历:用来搜索(因为DFS好写,本文以DFS为准还不是因为作者懒) STL中的set(map)的基本用法:数据很大,不能直接存. 具体做 ...

  3. 28 最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,.   思路: 解法1:对于小规模数据,可以采用类似前题的快速排序思路 ...

  4. 修剪草坪 HYSBZ - 2442

    在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪.现在,新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠. 然而,FJ的草坪非常脏乱,因此,FJ只能够让他的奶牛来完成这项工作.F ...

  5. php 实现店铺装修4

    /** * @title 发布装修的店铺 * @example FlagShipShopDecorate.fabu? 调试参数:{"username":"17721355 ...

  6. Core Data 基本数据操作 增删改查 排序

    所有操作都基于Core Data框架相关 API,工程需要添加CoreData.framework支持 1.增  NSEntityDescription insertNewObjectForEntit ...

  7. Cadence套件:Capture + Allegro应用笔记

    1.在Allegro中导入Netlist时,需要进行封装路径的设定: 在Setup->User Preference的Path->Library下面,设定所需封装文件(psm).焊盘文件( ...

  8. 十七 Ajax&校验用户名功能

    Ajax: 即"Asynchronous JavaScript And XML", 异步JavaScript和XML , 是指一种创建的交互式页面应用的网页开发技术,它并不是新的技 ...

  9. (十二)微信小程序实现登陆页面+登陆逻辑

    微信小程序实现登陆页面 实现上面两个页面 第一个页面 <view> <!-- 上侧部分 --> <view class="top-view"> ...

  10. SmartAssembly .net混淆后,无法找到部分类型

    两种解决方式: 1,在vs项目引用中,COM  嵌入互操作类型, 全部设为false. 2, 在混淆选项中,排除所有 引有的 外部COM类