问题标签 [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.

0 投票
3 回答
140 浏览

c - 有没有办法修复 stdint 类型的格式说明符警告?

问题是在一个平台(windows,mvsc2015)uint64_t上定义为unsigned long long,而在另一个平台(ubuntu,clang)上,它的unsigned long代码看起来像 sprintf(buffer, "%#llx", u64key);

0 投票
1 回答
764 浏览

c - 如何将 abs 和 div 与固定大小的整数一起使用

在 C99 中,我们有固定大小的整数类型,在stdint.h中定义。在stdlib.h中,我们有在int上运行的absdiv函数,以及它们的long int/long long int对应物labsllabsldivlldiv

由于 int/long/long long 的大小因平台和使用的编译器而异,我想知道在使用固定大小的整数(如 int16_t、int32_t 或 int64_t)时如何选择正确的abs/div变体?

0 投票
2 回答
2965 浏览

c++ - uintptr_t 与 DWORD_PTR 的用法

两者都用于存储地址和进行指针运算,都在 WinAPI 中定义,我应该什么时候使用uintptr_t(cstdint) 与DWORD_PTR(Windows.h)?在 x86 和 x86_64 中两者分别是 32 位和 64 位

ADWORD_PTRunsigned long用于指针精度的类型。在将指针转换为unsigned long类型以执行指针运算时使用它。DWORD_PTR也常用于在 64 位 Windows 中已扩展为 64 位的通用 32 位参数。

我不打算让我的代码可移植,我坚持使用 WinAPI。什么类型是最好的用例?

0 投票
1 回答
103 浏览

c - 为什么不需要存在所有最小宽度整数类型(最多 64 位)?

在 C99 和 C11(至少是它们的最终草案)中,我们发现需要存在uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_tin<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+0000U+10FFFFUnicode 4.0 中引入的约束)。我认为这将是一个更准确的选择,以防某些目标架构恰好具有(例如)快速 24 位整数。现在,我遇到了一个很大的预处理器部分,我正在测试21 到 32 之间defined(UINT_LEAST{N}_MAX)N以选择正确的类型。

0 投票
1 回答
1065 浏览

python - 将 stdint 与 swig 和 numpy.i 一起使用

我正在开发一个模块,用于c inline基于swig. 为此,我想让numpy数组在C. 到目前为止,我使用了 C 类型,unsigned short但我想使用uint16_tfrom之类的类型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++功能工作:

0 投票
1 回答
56 浏览

c - C中变量的标准字节大小?

所以,我正在用 C 编写一个 ye olde SHA1 算法的实现(我知道它不安全,它是针对 Matasano 问题的),并且对于某些变量来说,它们的长度正好是 32 位是非常重要的。读过unsigned long int标准的 32 位后,我就使用了它,然后花了 4 个小时试图找出为什么我的哈希值都错了,直到我想看看结果是什么sizeof(unsigned long int)。剧透,它是64。

现在当然我正在使用uint32_t,并且将来总是会使用,但是有人(最好是比我有更多自由裁量权和更少轻信的人)请指出我在哪里为现代 C 写下了可变大小的实际标准? 或者告诉我为什么这个问题被误导了,如果是的话?

0 投票
1 回答
156 浏览

c - 与 inttypes.h、fscanf()、fprintf() 不一致

我在使用 inttypes 时遇到了一些问题,这个小代码示例在这里说明了这一点:

给我

如果我在 fscanf 中更改为SCNu8SCNo8我会得到我应该得到的:

问题出在哪里?我不明白为什么它对第一个代码不起作用,但是当我将该字节解释为八进制值时起作用。

0 投票
1 回答
387 浏览

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?

0 投票
1 回答
673 浏览

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。

我希望有办法解决这个问题,因为我们在项目中收到了很多这样的警告,并且再也看不到真正的错误了。

0 投票
3 回答
597 浏览

c - 应如何为 x86_64 定义 [u]int_fastN_t 类型,无论是否使用 x32 ABI?

x32 ABI为 x86_64 体系结构生成的代码指定了32 位指针等。它结合了 x86_64 架构(包括 64 位 CPU 寄存器)的优点和 32 位指针的减少开销。

<stdint.h>头定义了 typedefs int_fast8_tint_fast16_tint_fast32_tint_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。)