问题标签 [nibble]

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 投票
0 回答
1006 浏览

ruby - 将 nginx uuid 从十六进制转换为 Base64:如何涉及字节顺序?

Nginx 可以配置为生成适合客户端识别的 uuid。在收到来自新客户端的请求后,它会以两种形式附加一个 uuid,然后将请求上游转发到源服务器:

  • Base64 中带有 uuid 的 cookie(例如CgIGR1ZfUkeEXQ2YAwMZAg==
  • 带有十六进制 uuid 的标头(例如4706020A47525F56980D5D8402190303

我想将十六进制表示转换为等效的 Base64。我在 Ruby 中有一个可行的解决方案,但我没有完全掌握底层机制,尤其是字节顺序的切换:

将其视为高半字节(最高有效 4 位在前)二进制数据hex_str的序列,生成(ASCII 编码)字符串表示:

映射binary_seq到 32 位小端无符号整数数组。每 4 个字符(4 个字节 = 32 位)映射为一个整数:

data其视为 32 位大端无符号整数数组,生成(ASCII 编码)字符串表示:

network_seq在 Base64 字符串中编码:

我粗略的理解是,big-endian 是网络通信的标准字节顺序,而 little-endian 在主机上更常见。为什么 nginx 提供了两种需要切换字节顺序才能转换的形式我不确定。

我也不明白.unpack("VVVV")and.pack("NNNN")步骤是如何工作的。我可以看到它G\x06\x02\n变成了\n\x02\x06G,但我不明白到达那里的步骤。例如,关注 的前 8 位hex_str,为什么做.pack(H*).unpack("VVVV")产生:

而直接转换为 base-10 会产生:

? 我问这个的事实表明我需要澄清所有这些转换中到底发生了什么:)

0 投票
5 回答
2431 浏览

c - C:实现半字节数组

我正在尝试将 16 个无符号值填充到 8 个字节(64 位)中,并使用类似数组的语法访问它们。
“数组”中的每个条目都是一个半字节 - 4 位长。(我计划存储的值永远不会大于 15)。

我的第一次尝试是这样的:

这种实现产生了两个问题:第一个是值以相反的顺序存储。当然,我可以以相反的顺序分配值以获得所需的结果:array.as_long = 0xfedcba9876543210,但我希望这段代码是可移植的,而不是依赖于字节序的。第二个是我无法以类似数组的语法访问带有索引的半字节。

第二次尝试是这样的:

以上可以解决第二个问题(类数组语法);现在我可以使用索引访问“元素”,但是字节顺序问题仍然存在,而且这会产生错误的输出:

15 7 11 13 14 15 7 11 13 6 3 9 12 14 15 7

  1. 为什么上面会产生这个输出?
  2. 您能否建议既允许我通过索引访问“数组”可以解决字节顺序问题的实现?
0 投票
1 回答
346 浏览

mask - 面具的想法

在此处输入图像描述

我不明白面具的想法,为什么它在这里有用?

0 投票
1 回答
55 浏览

byte - java中代表不同值的1个字节

我有一个字节,其中包含高 4 位是系统状态的位图,如 0x40,0x80 和低 4 位值,如 0,1,2,3。我不知道如何解析它们。有人能帮帮我吗。我能有这样的东西吗?字节会是什么样子???会是字节 b=(字节)0x80 吗?

0 投票
1 回答
246 浏览

c - 半字节转换器

各位程序员,您好,

我可能想问你,

我的大学有一项任务将十进制数字(0-9)转换为半位(nibble = 0101 ie。)限制是我们不能使用 if 语句

所以我尝试了一点,就这么远了

我的问题是,如果我这样做,我无法输入数字,程序崩溃

我真的很挣扎,不知道如何进行或使其工作

你能给我一些关于它如何工作的例子或一些如何让它工作的好建议吗?

我真的很感激

非常感谢您的任何帮助和回答!

0 投票
1 回答
27 浏览

converter - 半字节限制为 0-9

各位程序员,您好,

int main() int n;

到目前为止,我已经构建了此代码,该代码将十进制值转换为半字节。

它有效,但我对如何在不使用 if 语句的情况下将输入限制为 0-9 有疑问。有没有可能这样做,如果怎么做?目前该代码使用 0 - 15 位小数。您能否举个例子或向我解释一下,以便我理解。

谢谢!

0 投票
3 回答
253 浏览

c++ - 为什么 C++ 会分解成半字节?

为什么信息以四位(半字节)的序列存储?是否有任何特殊原因选择了四个位,可能是三个位或五个位?我一直想知道这个问题,我还没有找到一个明确的答案(如果有的话)关于为什么我们以这种方式对位进行分组。

0 投票
0 回答
191 浏览

c++ - 我应该如何处理半字节/四分之一字节数组?

我发现自己需要使用大小为 1/2 或 1/4 的元素的“数组” - 即半字节或四分之一字节的“数组”,打包在字节内(根据某些字节顺序选择)。

我知道标准库具有(不幸?)std::vector<bool>专业化(而 Boost 具有dynamic_bitset),但我想要一个更适合我的实际元素大小而不是单个位的抽象。如果迫不得已,我可能会使用代理对象实现一个伪容器,但如果有合理的替代方案,我宁愿避免自己这样做。在那儿?具体来说,标准库是否有我可以使用的相关设施?

注意:我们说的是更长的数组,其长度在编译时是未知的。

0 投票
2 回答
861 浏览

lua - 将浮点值转换为十六进制

我正在努力在 Lua 中进行浮点到十六进制的转换。我的应用程序与旧的 Akai S2000 采样器通信。采样器将两个字节消息编码为四个半字节值。半字节顺序相反,因此最重要的半字节排在最后。有一个参数使用值的小数部分的二进制编码。两个 MS 半字节用于编码值的整数部分,LS 半字节用于编码二进制小数。

基于这个讨论https://bytes.com/topic/c/answers/219928-how-convert-float-hex我已经开始实现一个 Lua 算法来从给定的参数值生成这些半字节值。由于我的计算能力不是很强,我认为我做很多事情都是错误的。应该有一种更简单的方法来计算这些值并避免我的许多愚蠢的 if/else hack。

我的代码(粘贴在下面)适用于正数,但对于负数来说要困难得多。

在我的测试中,我已将预期值添加到表中。每个表的工作方式如下:

即,positiveNumbers 表中的第一个条目表示输入值 0.01,该值的预期输出是包含 02 00 00 00 的四字节 MemoryBlock(前两个字节表示分数,后两个字节表示整数部分)。

目前我的算法在 -0.94 处失败,我无法绕过它而不破坏其他一些值。

有没有人是位计算的字符串,并且很容易看到我犯的任何菜鸟错误,尤其是在转换负值时?任何帮助或指示将不胜感激!

卢阿代码:

0 投票
1 回答
516 浏览

python - 使用 python 有效地解压缩 mono12packed 位串格式

我有来自相机的原始数据,它是 mono12packed 格式。这是一种交错位格式,将 2 个 12 位整数存储在 3 个字节中以消除开销。明确地,每 3 个字节的内存布局如下所示:

我有一个文件,可以使用二进制读取从其中读取所有字节,假设它被称为binfile.

要从我做的文件中获取像素数据:

这可行,但速度非常慢,我想更有效地做到这一点,因为我必须为大量数据这样做。

我的想法是,通过一次读取超过 3 个字节,我可以在转换步骤中腾出一些时间,但我不知道如何做到这一点。

另一个想法是,由于位是 4 个一包的,也许有一种方法可以处理半字节而不是位。

数据示例:

字节

导致数据