stdint - 如何在C中打印int64_t类型

C99标准具有整数类型,字节大小类似于int64_t。 我使用以下代码:

#include

#include

int64_t my_int = 999999999999999999;

printf("This is my_int: %I64d\n", my_int);

我得到这个编译器警告:

warning: format ‘%I64d’ expects type ‘int’, but argument 2 has type ‘int64_t’

我尝试过:

printf("This is my_int: %lld\n", my_int); // long long decimal

但我得到同样的警告。 我正在使用这个编译器:

~/dev/c$ cc -v

Using built-in specs.

Target: i686-apple-darwin10

Configured with: /var/tmp/gcc/gcc-5664~89/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1

Thread model: posix

gcc version 4.2.1 (Apple Inc. build 5664)

我应该使用哪种格式打印my_int变量而不发出警告?

rtacconi asked 2019-03-03T00:24:31Z

6个解决方案

340 votes

对于PRId32类型:

#include

int64_t t;

printf("%" PRId64 "\n", t);

适用于PRId32类型:

#include

uint64_t t;

printf("%" PRIu64 "\n", t);

您也可以使用PRId32以十六进制打印。

cppreference.com提供了所有类型的可用宏的完整列表,包括PRId32(int32_t)。 scanf有单独的宏,如"%d"。

PRIu16的典型定义是PRId32,因此隐式字符串常量级联在编译时发生。

为使您的代码完全可移植,您必须使用PRId32等进行打印int32_t和"%d"或类似的打印int。

ouah answered 2019-03-03T00:25:14Z

53 votes

C99的方式是

#include

int64_t my_int = 999999999999999999;

printf("%" PRId64 "\n", my_int);

或者你可以投!

printf("%ld", (long)my_int);

printf("%lld", (long long)my_int); /* C89 didn't define `long long` */

printf("%f", (double)my_int);

如果您坚持使用C89实现(特别是Visual Studio),您可以使用开源(和):[http://code.google.com/p/msinttypes/]

pmg answered 2019-03-03T00:25:52Z

13 votes

使用C99 printf(3)长度修改器也可以与printf系列函数一起使用,以打印j和intmax_t类型的值:

#include

#include

int main(int argc, char *argv[])

{

int64_t a = 1LL << 63;

uint64_t b = 1ULL << 63;

printf("a=%jd (0x%jx)\n", a, a);

printf("b=%ju (0x%jx)\n", b, b);

return 0;

}

使用printf(3)编译此代码不会产生警告,程序将打印预期的输出:

a=-9223372036854775808 (0x8000000000000000)

b=9223372036854775808 (0x8000000000000000)

这是根据我的Linux系统上的printf(3)(该手册页明确指出j用于表示转换为intmax_t或uintmax_t;在我的stdint.h中,int64_t和intmax_t都以完全相同的方式键入,并且 类似于uint64_t)。 我不确定这是否完全可以移植到其他系统。

pjhsea answered 2019-03-03T00:26:33Z

5 votes

在Windows环境中,使用

%I64d

在Linux中,使用

%lld

benlong answered 2019-03-03T00:27:06Z

5 votes

来自嵌入式世界,甚至uclibc并不总是可用,代码就像

uint64_t myval = 0xdeadfacedeadbeef;

printf("%llx", myval);

是打印废话或根本不工作 - 我总是使用一个小助手,允许我正确转储uint64_t十六进制:

#include

#include

#include

char* ullx(uint64_t val)

{

static char buf[34] = { [0 ... 33] = 0 };

char* out = &buf[33];

uint64_t hval = val;

unsigned int hbase = 16;

do {

*out = "0123456789abcdef"[hval % hbase];

--out;

hval /= hbase;

} while(hval);

*out-- = 'x', *out = '0';

return out;

}

ataraxic answered 2019-03-03T00:27:45Z

-1 votes

//VC6.0(386&amp;更好)

__int64 my_qw_var = 0x1234567890abcdef;

__int32 v_dw_h;

__int32 v_dw_l;

__asm

{

mov eax,[dword ptr my_qw_var + 4] //dwh

mov [dword ptr v_dw_h],eax

mov eax,[dword ptr my_qw_var] //dwl

mov [dword ptr v_dw_l],eax

}

//Oops 0.8 format

printf("val = 0x%0.8x%0.8x\n", (__int32)v_dw_h, (__int32)v_dw_l);

问候。

Daniel Ag answered 2019-03-03T00:28:13Z

c语言中int64类型,stdint - 如何在C中打印int64_t类型相关推荐

  1. linux printf int64,关于stdint:如何在C中打印int64_t类型

    C99标准具有整数类型,字节大小类似于int64_t. 我使用以下代码: #include #include int64_t my_int = 999999999999999999; printf(& ...

  2. c语言int t格式,如何在C中打印int64_t类型

    C99标准具有整数类型,字节大小类似int64_t.我使用下面的代码: #include #include int64_t my_int = 999999999999999999; printf(&q ...

  3. python中none是什么类型_如何在Python中”测试”None类型?

    我有一个方法,它有时返回一个非类型的值.那么我怎样才能质疑一个非类型的变量呢?例如,我需要使用if方法 if not new: new = '#' 我知道这是错误的方式,我希望你理解我的意思. 我想这 ...

  4. c语言的字符串不是存放,在C语言中,字符串不存放在一个变量中,而是存放在一个中...

    在C语言中,字符串不存放在一个变量中,而是存放在一个中 答:数组 中国大学MOOC: 请选择恰当的选项填入划线的空白处.国 生活習慣が違います. 答:によって 中国大学MOOC: 下列项目中,不应作为 ...

  5. 如何在 IIS 中添加 MIME 类型

    MIME 类型用于查找特定文件类型的管理方式,它指示文件的性质和格式. 今天,让我们详细了解一下如何在 IIS 中添加 MIME 类型. 什么是 MIME 类型? MIME(多用途 Internet ...

  6. mysql数据库 布尔类型_MySql数据库类型bit等与JAVA中的对应类型【布尔类型怎么存】...

    用char(1):可以表示字符或者数字,但是不能直接计算同列的值.存储消耗1个字节 用tinyint:只能表示数字,可以直接计算,存储消耗2个字节 用bit: 只能表示0或1,不能计算,存储消耗小于等 ...

  7. python打印多个变量名_如何在Python中打印单个和多个变量?

    请考虑下面Python 2.x中的两个Python代码片段.# Code 1 print 1 # Output: 1# Code 2 print(1) # Output: 1 在Python 2.X中 ...

  8. Microsoft Excel 教程「3」:如何在 Excel 中打印工作表?

    欢迎观看 Microsoft Excel 教程,小编带大家学习 Microsoft Excel 的使用技巧,了解如何在 Excel 中打印工作表. 可打印全部或部分工作表,可一次打印一个,也可一次打印 ...

  9. 【Mybatis】Mybatis将String类型的0存到数据库中的number类型字段中,变成了空;

    一.问题 Mybatis将String类型的0存到数据库中的number类型字段中,变成了空: 二.分析 自己写了一个自动写代码的脚本,带入springBatch后,读取文件时,少了序列号0-9的记录 ...

最新文章

  1. Tensorflow—CNN应用于MNIST数据集分类
  2. Waymo无人出租车加州上线一个月,日均156单,还有真·自动驾驶服务
  3. 浅谈 温故知新——HTML5!
  4. 线程安全存储以及pthread_getspecific/pthread_setspecific
  5. idea 分栏_常用SQL优化与IDEA超实用技巧分享
  6. server2012 AD域 radius 802.1x认证
  7. 这个Python资源在GitHub上标星超8000,现在被翻译成了中文 | 资源
  8. Docker-安装Vim
  9. 网络助手之NABCD
  10. linux 打开cgm软件,cgm文件扩展名,cgm文件怎么打开?
  11. Cryengine渲染引擎剖析(转)
  12. 如何自己搭建外卖红包平台,操作外卖CPS佣金提成实现躺赚?
  13. Erueka状态变更说明(十三)
  14. MySQL中的 last_day() 函数
  15. 【2021-09-22 修订】【梳理】计算机网络:自顶向下方法 第二章 应用层(docx)
  16. sql server 创建动态交叉表
  17. 虚拟机与MySQL的安装及配置
  18. 【附源码】计算机毕业设计SSM芮城县十全十美火锅店点餐系统
  19. ardupilot 加速度计六面校准
  20. 米框量化交易指标编写kd

热门文章

  1. 取模运算律[简单数学]
  2. 损失函数——均方误差
  3. MTCNN人脸检测(python实现)
  4. response.content和response.text的区别
  5. Unity 文本颜色描边性能优化方案
  6. 深度学习之OCR识别
  7. IDEA使用阿里巴巴Alibaba编码规范插件
  8. macos git技巧【配置公匙】【提交代码】[中文目录的命令匹配(clean checkout等命令)][删除所有记录的某个文件]
  9. 现代密码学及其应用 (理查德E.布拉胡特) 中文pdf扫描版[141MB]
  10. opencv 入门笔记九 文件夹读取图片序列并视频播放