如何打印uint64 t

下次自動登錄
現在的位置:
& 綜合 & 正文
c/c++: uint8_t uint16_t uint32_t uint64_t size_t ssize_t數據類型
在nesc的中,你會看到很多你不認識的數據類型,比如uint8_t等。咋一看,好像是個新的數據類型,不過C語言(nesc是C的擴展)裡面好像沒有這種數據類型啊!怎麼又是u又是_t的?很多人有這樣的疑問。論壇上就有人問:以*_t結尾的類型是不是都是long型的?在baidu上查一下,才找到答案,這時才發覺原來自己對C掌握的太少。
那麼_t的意思到底表示什麼?具體的官方答案沒有找到,不過我覺得有個答案比較接近。它就是一個結構的標註,可以理解為type/typedef的縮寫,表示它是通過typedef定義的,而不是其它數據類型。
uint8_t,uint16_t,uint32_t等都不是什麼新的數據類型,它們只是使用typedef給類型起的別名,新瓶裝老酒的把戲。不過,不要小看了typedef,它對於你代碼的維護會有很好的作用。比如C中沒有bool,於是在一個軟體中,一些員使用int,一些程序員使用short,會比較混亂,最好就是用一個typedef來定義,如:
一般來說,一個C的工程中一定要做一些這方面的工作,因為你會涉及到跨平台,不同的平台會有不同的字長,所以利用預編譯和typedef可以讓你最有效的維護你的代碼。為了用戶的方便,C99標準的C語言硬體為我們定義了這些類型,我們放心使用就可以了。
按照posix標準,一般整形對應的*_t類型為:
附:inttypes.h的內容(不同的伺服器會有不同的源文件結構,但原理是一樣的,我這裡sun伺服器inttypes.h引用了int_type.h)
bash-3.00$ vi int_types.h
"int_types.h" [Read only] 176 lines, 4367 characters
#ifndef _SYS_INT_TYPES_H
#define _SYS_INT_TYPES_H
#pragma ident
"@(#)int_types.h
04/09/28 SMI"
#include &sys/feature_tests.h&
#ifdef __cplusplus
extern "C" {
#if defined(_CHAR_IS_SIGNED)
typedef char
#if defined(__STDC__)
typedef signed char
typedef short
typedef int
#define _INT64_TYPE
typedef long
/* _ILP32 */
#if defined(_LONGLONG_TYPE)
#define _INT64_TYPE
typedef long long
typedef unsigned char
typedef unsigned short
typedef unsigned int
typedef unsigned long
/* _ILP32 */
#if defined(_LONGLONG_TYPE)
typedef unsigned long long
#if defined(_INT64_TYPE)
typedef int64_t
typedef uint64_t
uintmax_t;
typedef int32_t
typedef uint32_t
uintmax_t;
#if defined(_LP64) || defined(_I32LPx)
typedef long
typedef unsigned long
uintptr_t;
typedef int
typedef unsigned int
uintptr_t;
#if defined(_CHAR_IS_SIGNED)
typedef char
int_fast8_t;
#if defined(__STDC__)
typedef signed char
int_fast8_t;
typedef int
int_fast16_t;
typedef int
int_fast32_t;
typedef long
int_fast64_t;
/* _ILP32 */
#if defined(_LONGLONG_TYPE)
typedef long long
int_fast64_t;
typedef unsigned char
uint_fast8_t;
typedef unsigned int
uint_fast16_t;
typedef unsigned int
uint_fast32_t;
typedef unsigned long
uint_fast64_t;
/* _ILP32 */
#if defined(_LONGLONG_TYPE)
typedef unsigned long long
uint_fast64_t;
#if defined(_CHAR_IS_SIGNED)
typedef char
int_least8_t;
#if defined(__STDC__)
typedef signed char
int_least8_t;
typedef short
int_least16_t;
typedef int
int_least32_t;
typedef long
int_least64_t;
/* _ILP32 */
#if defined(_LONGLONG_TYPE)
typedef long long
int_least64_t;
typedef unsigned char
uint_least8_t;
typedef unsigned short
uint_least16_t;
typedef unsigned int
uint_least32_t;
typedef unsigned long
uint_least64_t;
/* _ILP32 */
#if defined(_LONGLONG_TYPE)
typedef unsigned long long
uint_least64_t;
#ifdef __cplusplus
#endif /* _SYS_INT_TYPES_H */
同理在types.h文件中會有size_t ssize_t的定義,篇幅較長不貼出了。
&&&&推薦文章:
【上篇】【下篇】14256人阅读
C/C++(31)
uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型
这些数据类型是 C99 中定义的,具体定义在:/usr/include/stdint.h & &ISO C99: 7.18 Integer types &stdint.h&
/* There is some amount of overlap with &sys/types.h& as known by inet code */
#ifndef __int8_t_defined
# define __int8_t_defined
typedef signed char
typedef short int
typedef int
# if __WORDSIZE == 64
typedef long int
__extension__
typedef long long int
/* Unsigned.
typedef unsigned char
typedef unsigned short int
#ifndef __uint32_t_defined
typedef unsigned int
# define __uint32_t_defined
#if __WORDSIZE == 64
typedef unsigned long int
__extension__
typedef unsigned long long int
格式化输出:
unit64_t & &&%llu &&
unit32_t & & %u
unit16_t & &%hu
必须小心 uint8_t 类型变量的输出,例如如下代码,会输出什么呢?
uint8_t fieldID = 67;
cerr&& &field=& && fieldID &&
结果发现是:field=C 而 不是我们所想的&field=67
typedef&unsigned&char&uint8_t;&
实际是一个 char,&cerr && 会输出 ASCII 码是 67 的字符,而不是 67 这个数字.
因此,输出
uint8_t 类型的变量实际输出的是其对应的字符, 而不是真实数字.
若要输出 67,则可以这样:
cerr&& &field=& && (uint16_t)&fieldID &&
结果是:field=67
同样:&uint8_t
类型变量转化为字符串以及字符串转化为&uint8_t 类型变量都要注意,&uint8_t类型变量转化为字符串时得到的会是ASCII码对应的字符, 字符串转化为 uint8_t 变量时, 会将字符串的第一个字符赋值给变量.
例如如下代码:
#include &iostream&
#include &stdint.h&
#include &sstream&
int main()
uint8_t fieldID = 67;
// uint8_t --& string
ostringstream strOS
strOStream && fieldID;
s = strOStream.str();
cerr && s &&
// string --& uint8_t
stringstream strS
strStream &&
strStream && fieldID;
strStream.clear();
cerr && fieldID &&
上述代码输出的是:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:882065次
积分:10320
积分:10320
排名:第936名
原创:222篇
转载:44篇
评论:130条
(1)(1)(2)(1)(1)(5)(1)(1)(4)(2)(4)(1)(4)(6)(9)(3)(7)(4)(6)(24)(14)(9)(2)(1)(6)(6)(1)(44)(22)(1)(14)(6)(5)(14)(12)(6)(4)(1)(11)如何printf uint64_百度知道
如何printf uint64
提问者采纳
uint64_t num=10;;printf(&quot: format '转载,祝你愉快,满意请采纳;long long int'修正如下;uint64: #include &lt: %llu\warning, num);&#92, but argument 4 has type ' PRIu64 &quot.h&uint64_t'n&uint64;n&: %&quot,仅供参考, num);%llu'; expects type 'printf(&quot用llu打印 uint64,在64位OS下编译会报如下warning
来自团队:
其他类似问题
为您推荐:
其他1条回答
uint64_t num=10;n&quot.h&gt: #include &lt: format '修正如下;long long int'%llu'inttypes, but argument 4 has type 'printf(&uint64;uint64_t': %llu\ expects type ';warning, num);用llu打印 uint64,在64位OS下编译会报如下warning
printf的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID空间积分0 积分143阅读权限10帖子精华可用积分143 信誉积分336 专家积分0 在线时间242 小时注册时间最后登录
白手起家, 积分 143, 距离下一级还需 57 积分
帖子主题精华可用积分143 信誉积分336 专家积分0 在线时间242 小时注册时间最后登录
论坛徽章:0
我用了%lu、%ld都不行,用%lu是提示:warning: format ‘%lu’ expects type ‘long unsigned int’, but argument 3 has type ‘uint64_t’
请问应该用什么才能打印出uint64_t类型的数据?操作系统是32位的centOS。
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID空间积分0 积分874阅读权限20帖子精华可用积分874 信誉积分104 专家积分0 在线时间831 小时注册时间最后登录
丰衣足食, 积分 874, 距离下一级还需 126 积分
帖子主题精华可用积分874 信誉积分104 专家积分0 在线时间831 小时注册时间最后登录
论坛徽章:0
UID空间积分0 积分23267阅读权限100帖子精华可用积分23267 信誉积分927 专家积分147 在线时间985 小时注册时间最后登录
帖子主题精华可用积分23267 信誉积分927 专家积分147 在线时间985 小时注册时间最后登录
认证徽章论坛徽章:0
32位%llu,64位%lu就行
UID空间积分0 积分0阅读权限10帖子精华可用积分2 信誉积分4 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 0, 距离下一级还需 200 积分
帖子主题精华可用积分2 信誉积分4 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
2楼正解&&多谢
鬼话始于呵呵
UID空间积分0 积分3639阅读权限50帖子精华可用积分3639 信誉积分1325 专家积分0 在线时间2943 小时注册时间最后登录
小富即安, 积分 3639, 距离下一级还需 1361 积分
帖子主题精华可用积分3639 信誉积分1325 专家积分0 在线时间2943 小时注册时间最后登录
论坛徽章:0
#include &inttypes.h&
#include &stdio.h&
int main (void) {printf (&%&PRIu64 , (uint64_t)1) ;}复制代码请教 uint64_t
64位下编译如何修改下面这个函数的 警告信息?
[问题点数:50分,结帖人hc_net]
请教 uint64_t
64位下编译如何修改下面这个函数的 警告信息?
[问题点数:50分,结帖人hc_net]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2008年3月 Linux/Unix社区大版内专家分月排行榜第二
2012年9月 Linux/Unix社区大版内专家分月排行榜第三2007年6月 Linux/Unix社区大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 uint64 t 打印 的文章

 

随机推荐