问题标签 [uint8t]
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++ - 1字节整数数据类型
我写了以下代码:
但是当我输入c
-hex for 12 - 输出也是c
. 我期待 12。后来我了解到:
uint8_t
通常是unsigned char
. 所以它实际上读c
作 ASCII 0x63。
是否有一个 1 字节整数在执行 I/O 时表现为整数而不是字符?
objective-c - 如何从目标c中的蓝牙心率监测器中提取字节数据
我无法理解字节和 uint8_t 值。
我正在使用苹果创建的示例项目,它通过心率服务协议从蓝牙 4.0 心率监视器读取数据。示例项目给出的心率数据如下:
我假设 (reportData[0] & 0x01) 返回数据数组 reportData 中的第一个数据位,但我不知道如何访问第二个数据位, (reportData[0] & 0x02) 不像我想象的那样工作。理想情况下,我想检查 reportData[0] 中的所有数据,然后根据它获取 reportData[4] 或 [5] 中的 rr 间隔数据,具体取决于它的存储位置并遍历它以获得我相信的每个值那里可以存储多个值。
一个我知道的新手问题,但我无法找到答案,或者确实找不到建立答案的搜索词。
javascript - 在 javascript 中处理 uint8_t
G'day 人民,
我正在使用 MavLink 获取 GPS 信息。其中一种消息类型是 GPS_STATUS,MavLink 使用一系列 uint8_t[20] 对其进行描述。
如果我运行以下代码:
我得到以下输出:
所以显然它不起作用。我需要一种方法来获取每个元素的 int 值。
这让我觉得我可以做到以下几点:
但是当我通过 JSON 对其进行字符串化时,它会报告 [],我认为这是一个空数组。
有谁知道我该怎么做?我知道数据是一个由 20 个无符号 8 位整数组成的数组。我只需要知道如何访问或解析它们。
注意:我使用的是 node.js,但这不应该影响我正在做的事情。这就是我使用 console.log 的原因,因为它在 node.js 中很有用。
c++ - 什么时候 uint8_t ≠ unsigned char?
根据 C 和 C++ CHAR_BIT >= 8
,.
但是无论何时CHAR_BIT > 8
,uint8_t
甚至都不能表示为 8 位。
它必须更大,因为它CHAR_BIT
是系统上任何数据类型的最小位数。
什么样的系统可以uint8_t
合法地定义为除 之外的类型unsigned char
?
(如果 C 和 C++ 的答案不同,那么我想两者都知道。)
c++ - char* 和 std::uint8_t* 之间的 reinterpret_cast - 安全吗?
现在我们有时都必须使用二进制数据。在 C++ 中,我们使用字节序列,从一开始char
就是我们的构建块。定义为sizeof
1,它是字节。char
并且默认使用所有库 I/O 函数。一切都很好,但总是有一点点担心,一些奇怪的东西会困扰一些人——一个字节中的位数是实现定义的。
所以在 C99 中,决定引入几个 typedef 让开发人员可以轻松地表达自己,固定宽度的整数类型。当然是可选的,因为我们不想损害可移植性。其中uint8_t
, 迁移到 C++11 作为std::uint8_t
, 一个固定宽度的 8 位无符号整数类型,对于真正想要使用 8 位字节的人来说是完美的选择。
因此,开发人员接受了新工具并开始构建库,这些库明确地声明他们接受 8 位字节序列,asstd::uint8_t*
或std::vector<std::uint8_t>
其他。
但是,也许经过深思熟虑,标准化委员会决定不要求实现,std::char_traits<std::uint8_t>
因此禁止开发人员轻松便携地将 s 实例化,例如,std::basic_fstream<std::uint8_t>
轻松地std::uint8_t
将 s 读取为二进制数据。或者也许,我们中的一些人不关心字节中的位数并且对此感到满意。
但不幸的是,两个世界发生冲突,有时您必须将数据作为char*
并将其传递给期望的库std::uint8_t*
。但是等等,你说,不是char
可变位并且std::uint8_t
固定为8吗?会不会导致数据丢失?
好吧,这有一个有趣的标准语。定义为恰好保存一个字节并且字节是内存的char
最低可寻址块,因此不能有位宽小于char
. 接下来,它被定义为能够保存 UTF-8 代码单元。这给了我们最小值 - 8 位。所以现在我们有一个需要 8 位宽的 typedef 和一个至少 8 位宽的类型。但是有替代品吗?是的,unsigned char
。请记住,签名char
是实现定义的。还有其他类型吗?谢天谢地,没有。所有其他整数类型的所需范围都在 8 位之外。
最后,std::uint8_t
是可选的,这意味着如果未定义使用此类型的库将不会编译。但是如果它编译呢?我可以非常自信地说,这意味着我们处于一个具有 8 位字节和CHAR_BIT == 8
.
一旦我们知道我们有 8 位字节,即std::uint8_t
实现为char
or unsigned char
,我们是否可以假设我们可以执行reinterpret_cast
from char*
to std::uint8_t*
,反之亦然?它是便携式的吗?
这就是我的标准阅读技巧让我失望的地方。我阅读了有关安全派生指针 ( [basic.stc.dynamic.safety]
) 的内容,据我所知,以下内容:
如果我们不碰它是安全的buffer2
。如我错了请纠正我。
因此,鉴于以下先决条件:
CHAR_BIT == 8
std::uint8_t
被定义为。
假设我们正在处理二进制数据并且可能缺少符号无关紧要,那么它是否可移植且安全char*
?std::uint8_t*
char
我将不胜感激对标准的参考和解释。
编辑:谢谢,杰里·科芬。我将添加来自标准的引用([basic.lval],§3.10/10):
如果程序尝试通过非下列类型之一的泛左值访问对象的存储值,则行为未定义:
...
— char 或 unsigned char 类型。
EDIT2:好的,更深入。std::uint8_t
不保证是unsigned char
. 它可以实现为扩展无符号整数类型,扩展无符号整数类型不包含在 §3.10/10 中。现在怎么办?
bit-shift - 将 16 位整数转换为 8 位整数?
我正在实现 C 代码以将 16 位符号和幅度整数复制到 8 位符号和幅度整数。这甚至可能吗?有人可以解释一下如何做到这一点吗?
代码片段:
如何将前两位数字复制到变量b,然后将后两位数字复制到变量c?
objective-c - uint8_t[] 数组转换为 NSString got (null)
我不知道为什么 (char *)uint8_t 数组转换为 NSString 不起作用。ivString 始终为 (null)
cipherData NSData * 0x1edaf3a0 16 字节
密码字符串 NSString * 0x00000000
初始化向量 uint8_t [16]
ivString NSString * 0x00000000
键 NSString * 0x000d28c4 @"1234567890123456"
普通 NSData * 0x1ed80760 9 字节
附言
这也行不通。仍然得到(空)
我调用的方法是:
c++ - 为什么 uint8_t 和 int8_t 不适用于文件和控制台流?
根据 typedef 中的内容以及将其转换为(或未转换)的内容,它会做各种愚蠢的事情。
它恰好适用于'typedef char'并且没有演员表。(如预期的那样,当转换为 int 时为 97)
uint8_t 和 int8_t 都将打印
没有演员表什么都没有
转换为 char 或 unsigned char 时什么都没有
当转换为 int 或 unsigned 时为 8(尽管 ASCII 'a' 应为 97)
我以某种方式设法打印了一个“�”字符,但忘记了它是哪种情况。
为什么我会得到这些奇怪的结果?
给未来读者的注意事项:
从给出的答案中得出结论:仅使用 char (或标准也提到的宽字符之一)实例化流,否则您不会收到编译器警告和静默失败
标准保证这些东西是非常可悲的
故事的寓意:避免使用 C++
c - 将 int 转换为 uint8_t
将int
值转换为uint8_t
:
假设 x 永远不会小于 0。虽然gcc
没有对上述行发出任何警告,但我只是想确定这样做是否正确,或者是否有更好的方法将 int 转换为 uint8_t?
PS 如果您要建议标准功能,我在 Linux 上使用 C
c++ - Convert vector of uint8 to string
I have a pointer to a vector of type uint8.
How would I take this pointer and convert the data in the vector into a full string representative of its content?