问题标签 [stdint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 有没有办法修复 stdint 类型的格式说明符警告?
问题是在一个平台(windows,mvsc2015)uint64_t
上定义为unsigned long long
,而在另一个平台(ubuntu,clang)上,它的unsigned long
代码看起来像
sprintf(buffer, "%#llx", u64key);
c - 如何将 abs 和 div 与固定大小的整数一起使用
在 C99 中,我们有固定大小的整数类型,在stdint.h中定义。在stdlib.h中,我们有在int上运行的abs和div函数,以及它们的long int/long long int对应物labs、llabs、ldiv、lldiv。
由于 int/long/long long 的大小因平台和使用的编译器而异,我想知道在使用固定大小的整数(如 int16_t、int32_t 或 int64_t)时如何选择正确的abs/div变体?
c++ - uintptr_t 与 DWORD_PTR 的用法
两者都用于存储地址和进行指针运算,都在 WinAPI 中定义,我应该什么时候使用uintptr_t
(cstdint) 与DWORD_PTR
(Windows.h)?在 x86 和 x86_64 中两者分别是 32 位和 64 位
A
DWORD_PTR
是unsigned long
用于指针精度的类型。在将指针转换为unsigned long
类型以执行指针运算时使用它。DWORD_PTR
也常用于在 64 位 Windows 中已扩展为 64 位的通用 32 位参数。
我不打算让我的代码可移植,我坚持使用 WinAPI。什么类型是最好的用例?
c - 为什么不需要存在所有最小宽度整数类型(最多 64 位)?
在 C99 和 C11(至少是它们的最终草案)中,我们发现需要存在uint_least8_t
, uint_least16_t
, uint_least32_t
, uint_least64_t
in<stdint.h>
以及它们的签名变体。
我认为要求1 到 64 之间uint_least{N}_t
的所有N的可用性是合理的。有充分的理由说明情况并非如此吗?如果实现必须提供 8、16、32 和 64,那么对于所有较小的N值的实现肯定应该是可行的(例如typedef uint_least16_t uint_least15_t;
,对于 x86,等是显而易见的)。
我之所以问,是因为我发现自己想要一种uint_least21_t
类型来存储单个 Unicode 代码点,它可以具有介于两者之间的任何值U+0000
(U+10FFFF
Unicode 4.0 中引入的约束)。我认为这将是一个更准确的选择,以防某些目标架构恰好具有(例如)快速 24 位整数。现在,我遇到了一个很大的预处理器部分,我正在测试21 到 32 之间defined(UINT_LEAST{N}_MAX)
的N以选择正确的类型。
python - 将 stdint 与 swig 和 numpy.i 一起使用
我正在开发一个模块,用于c inline
基于swig
. 为此,我想让numpy
数组在C
. 到目前为止,我使用了 C 类型,unsigned short
但我想使用uint16_t
from之类的类型stdint.h
来保存我的模块遇到的任何编译器。
不幸的是,使用类型c++
时 -functions 没有正确包装。stdint.h
给出的错误是:_setc() takes exactly 2 arguments (1 given)
。这意味着,该函数未包装以接受numpy
数组。当我使用 eg 时,不会发生错误unsigned short
。
你有什么想法,我怎么能把 swig 地图numpy
数组变成swig 地图数组stdint-types
?
interface.i
不工作:
c++
功能不工作:
interface.i
在职的:
c++
功能工作:
c - C中变量的标准字节大小?
所以,我正在用 C 编写一个 ye olde SHA1 算法的实现(我知道它不安全,它是针对 Matasano 问题的),并且对于某些变量来说,它们的长度正好是 32 位是非常重要的。读过unsigned long int
标准的 32 位后,我就使用了它,然后花了 4 个小时试图找出为什么我的哈希值都错了,直到我想看看结果是什么sizeof(unsigned long int)
。剧透,它是64。
现在当然我正在使用uint32_t
,并且将来总是会使用,但是有人(最好是比我有更多自由裁量权和更少轻信的人)请指出我在哪里为现代 C 写下了可变大小的实际标准? 或者告诉我为什么这个问题被误导了,如果是的话?
c - 与 inttypes.h、fscanf()、fprintf() 不一致
我在使用 inttypes 时遇到了一些问题,这个小代码示例在这里说明了这一点:
给我
如果我在 fscanf 中更改为SCNu8
,SCNo8
我会得到我应该得到的:
问题出在哪里?我不明白为什么它对第一个代码不起作用,但是当我将该字节解释为八进制值时起作用。
php - Get full line with fscanf function
I have to read a full line from stdin. When I use fscanf
it reads only string before a space. I need to read a whole line inluding spaces. Any ideas how can I achieve this?
printf - 如何使用 stdint.h 的 int64_t 变量(cpcheck 认为它是有符号整数)防止 %"PRIi64" (%lld) 的 cppcheck (v1.72) 警告
对于一个序列
cppcheck 给出以下警告:
警告:格式字符串(第 1 号)中的 %lld 需要“long long”,但参数类型为“signed int”。
makro PRIi64 由 lld 解析,这是正确的,但不接受 64 位整数类型作为 long long int。
我希望有办法解决这个问题,因为我们在项目中收到了很多这样的警告,并且再也看不到真正的错误了。
c - 应如何为 x86_64 定义 [u]int_fastN_t 类型,无论是否使用 x32 ABI?
x32 ABI为 x86_64 体系结构生成的代码指定了32 位指针等。它结合了 x86_64 架构(包括 64 位 CPU 寄存器)的优点和 32 位指针的减少开销。
标<stdint.h>
头定义了 typedefs int_fast8_t
、int_fast16_t
、int_fast32_t
和int_fast64_t
(以及相应的无符号类型uint_fast8_t
等),其中每一个是:
在至少具有指定宽度的所有整数类型中,通常使用最快的整数类型
带脚注:
不保证指定的类型在所有用途中都是最快的;如果实现没有明确的理由选择一种类型而不是另一种,它将简单地选择一些满足符号和宽度要求的整数类型。
(引自N1570 C11 草案。)
问题是,无论有没有 x32 ABI,应该如何为 x86_64 架构定义类型[u]int_fast16_t
和类型?[u]int_fast32_t
是否有指定这些类型的 x32 文档?它们是否应该与 32 位 x86 定义(均为 32 位)兼容,或者,由于 x32 可以访问 64 位 CPU 寄存器,它们是否应该在有或没有 x32 ABI 的情况下具有相同的大小?(请注意,无论 x32 ABI 是否在使用中,x86_64 都有 64 位寄存器。)
这是一个测试程序(取决于 gcc 特定的__x86_64__
宏):
当我用 编译它时gcc -m64
,输出是:
当我用 编译它时gcc -mx32
,输出是:
(除了第一行之外,它与输出匹配gcc -m32
,生成 32 位 x86 代码)。
这是 glibc 中的错误(它定义了<stdint.h>
标头),还是遵循某些 x32 ABI 要求?在x32 ABI 文档或x86_64 ABI 文档中都没有对[u]int_fastN_t
类型的引用,但可能有其他东西指定它。
有人可能会争辩说,fast16 和 fast32 类型应该是带有或带有 x32 的 64 位,因为 64 位寄存器可用;这会比当前的行为更有意义吗?
(我已经对原始问题进行了实质性编辑,该问题仅询问了 x32 ABI。现在问题询问了带有或不带有 x32 的 x86_64。)