问题标签 [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.
arm - uint32_t 在 CMSIS 数学文件中似乎是未知的?
我收到错误消息:
CMSIS/DSP/Include/arm_math.h:3943:3:错误:未知类型名称“uint32_t”;你的意思是“wint_t”吗?
我可以将 stdint.h 添加到 arm_math.h 但我认为我首先做错了什么。如果需要,CMSIS 开发人员肯定会添加一个包含吗?有什么建议该怎么做吗?我使用了 arm-none-eabi-gcc。
c - 在 C 中定义全局常量
如何在 C 中定义全局常量?我被告知要做这样的事情
在 header.h 中
在代码.c
但我得到一个编译错误:
错误:未初始化的 const 'g_my_const' [-fpermissive]
有人可以解释如何正确地做到这一点。
c++ - 为什么“stdint.h”的实现对 UINT8_C 的定义存在分歧?
宏在“stdint.h ”UINT8_C
中定义,具有以下规范:宏UINTN_C(value)
应扩展为对应于类型的整数常量表达式uint_leastN_t
。
然而,在野外,实现有所不同:
前两个实现看起来大致相同,但第三个的行为不同:例如,以下程序1
使用 AVR-libc 和 QP/C++ 打印,但-1
使用 glibc(因为有符号值的右移会传播符号位)。
的实现UINT16_C
显示相同的行为,但不是UINT32_C
,因为它的定义包含U
后缀:
有趣的是,由于错误报告,glibc 的定义在 2006 年UINT8_C
发生了变化。之前的定义是,但是由于整数提升规则,它产生了不正确的输出 ( ) 。#define UINT8_C(c) c ## U
false
-1 < UINT8_C(0)
根据标准,这三个定义都正确吗?这三个实现之间是否还有其他区别(除了负常数的处理)?
c - 将 uint32_t 转换为 int32_t 并在之后进行比较
我无法理解如何比较两个整数,其中一个是 unsigned int32 而另一个是有符号 int32 工作。让我们考虑这个简单的程序:
在这种情况下,a1
超出了有符号的 32 位整数范围,所以正如我在调试时确认的那样,在它被转换后,b1
等于-1
. 但是它仍然打印“Equal”,而这些值显然不一样。它是由什么引起的?
c++ - 如何检查是否定义了固定宽度的整数
在 C++ 中,固定宽度整数被定义为optional,但我似乎找不到推荐的方法来检查它们是否实际定义。
检查固定宽度整数是否可用的便携式方法是什么?
c - 如何找到 uint_fast32_t 的宽度
我希望能够携带所有前导零定义的fprintf()
a 。例如,如果我的平台定义为 64 位无符号整数,我想使用格式说明符,例如,但如果它是 32 位无符号整数,我想使用.uint_fast32_t
stdint.h
uint_fast32_t
fprintf()
%016lX
%08lX
有没有INTFAST32_BITS
我可以使用的宏?
现在我正在使用
但这仅适用于uint_fast32_t
恰好 32 或 64 位宽的情况,而且代码也有点笨重且难以阅读
c - stdint.h include_next'd from stdint.h not found
我一直在为我计划的一些即将到来的项目组合一个 m68k 交叉编译“环境/工具链”,特别是在 macOS(我的原生环境)上使用它时遇到了问题。
如果我按照自己的说明在 Linux 上安装(https://github.com/tomstorey/m68k_bare_metal/blob/master/INSTALL-Debian-Ubuntu.md),那么在我的代码中我可以使用诸如uint8_t
etc 通过#include <stdint.h>
.
但是,如果我在 macOS 上安装并尝试做同样的事情,我会遇到这个错误:
我已经做了一些搜索,但我没有找到答案,也许是因为我真的不知道除了“stdint.h not found”之外要搜索什么。
我确实发现的一个主题建议include_next
不应该真正使用,但同一个人不会建议修改原始stdint.h
文件来解决它。大概是因为在这种情况下它包含<stdint.h>
然后这个文件应该位于“系统明智”的某个地方,并且gcc
应该知道在哪里可以找到它?但大概那个位置不存在。
stdint.h
在我试图包含的文件所在的同一目录中,有一个stdint-gcc.h
文件,如果我在我的代码中包含它,它将编译得很好,不用担心。
原始stdint.h
文件似乎确实试图包含此文件,但前提__STDC_HOSTED__
是未定义:
抱歉,如果这篇文章有点笨拙,但是我对gcc
等方面的经验还不够,无法真正解决这个问题,而且我仍在学习很多关于设置所有这些的知识,所以我想知道是否有人知道我错过了。
谢谢
c - 为什么 stdatomic.h 包含 atomic_uint_least16_t 和 atomic_uint_fast16_t 但不包含 atomic_uint16_t?
stdatomic.h
似乎包含 atomic_uint_least16_t
and atomic_uint_fast16_t
,它们是and类型_Atomic
的版本,但它不包含. 为什么?stdint.h
uint_least16_t
uint_fast16_t
atomic_uint16_t
有关N1548 草案的一些背景信息:
7.18.1.1 精确宽度整数类型
1 typedef 名称
int
N_t
指定宽度为 N、无填充位和二进制补码表示的有符号整数类型。因此,int8_t
表示这样一个宽度正好为 8 位的有符号整数类型。2 typedef 名称
uint
N_t
指定宽度为 N 且无填充位的无符号整数类型。因此,uint24_t
表示这种无符号整数类型,其宽度正好为 24 位。3 这些类型是可选的。但是,如果实现提供了宽度为 8、16、32 或 64 位的整数类型,没有填充位,并且(对于有符号类型)具有二进制补码表示,则它应定义相应的 typedef 名称。
7.18.1.2 最小宽度整数类型
1 typedef 名称
int_least
N_t
指定一个宽度至少为 N 的有符号整数类型,使得没有更小尺寸的有符号整数类型至少具有指定的宽度。因此,int_least32_t
表示宽度至少为 32 位的有符号整数类型。2 typedef 名称
uint_least
N_t
指定一个宽度至少为 N 的无符号整数类型,使得没有更小尺寸的无符号整数类型至少具有指定的宽度。因此,uint_least16_t
表示宽度至少为 16 位的无符号整数类型。3 需要以下类型:
此表格的所有其他类型都是可选的。
(依此类推,要包括int_fast
N _t
/ uint_fast
N_t
类型等)
第 3 段值得强调:
但是,如果实现提供了宽度为 8、16、32 或 64 位的整数类型,没有填充位,并且(对于有符号类型)具有二进制补码表示,则它应定义相应的 typedef 名称。
这意味着,例如,如果我有一个类似int
or的类型,short
它被实现为具有二进制补码表示的 16 位整数,那么实现应定义int16_t
.
的atomic_
类型<stdatomic.h>
也列在N1548中(转载如下),但它没有做出相应的要求,即如果实现有 aint16_t
则有atomic_int16_t
--- 这就是我的问题的性质。
7.17.6 原子整数和地址类型
1 对于下表中的每一行,原子类型名称被声明为相应的直接类型。
2 对这些类型的操作的语义在 7.17.7 中定义。
3 该
atomic_bool
类型提供一个原子布尔值。4 该
atomic_address
类型提供原子 void * 操作。加/减的单位应为一个字节。5 注意原子整数和地址类型的表示不需要与它们对应的常规类型具有相同的大小。它们应该尽可能具有相同的大小,因为它可以减轻移植现有代码所需的工作量。
c - 是否有必要包括保证C99新机型的便携性?
据我了解,C99中定义了新类型,例如uint32_t
,uint_fast64_t
等。但是,我注意到它们也在 中定义,并且从gnu.org我发现它是检查的众多标头之一,但仅在其他网站中被引用。uintmax_t
<stdint.h>
stdlib.h
<stdint.h>
如果我使用这些类型,包括 only <stdlib.h>
,它们在我的实现中定义,我的程序是否可以移植到其他平台,或者它不能工作,因为在另一台计算机中它们只定义在 中<stdint.h>
?
我的猜测是,如果我从我的计算机为每个架构/操作系统编译程序,不会有任何问题,但是编译可能会从另一个失败,因为在那个特定的实现中,新类型只在另一个头文件中定义。
python - 使用 Python.h 将 uint32_t 数组传递给 Python
我正在尝试在 C 中为 python 构建一个模块。该模块有几行和方法,但最重要的一个是将 uint32_t 数组串联的整数表示有效地传递给 python。例如,从下面的代码
我希望在 python 中,该十六进制元素的连接的整数表示为 0x000003000000110000022200 = 14167099467300633453056。如您所见,我尝试使用“s#”,但没有成功。请给我一个建议好吗?