问题标签 [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 回答
252 浏览

c++ - C ++在文件中写入半字节

晚上好,我是 C++ 新手,遇到了一个问题,尽管在这里阅读了很多页面,但我还是无法解决。我有一个包含十六进制值的文件,需要读取和压缩,然后写入一个新文件。示例序列如下所示:

C9 CB FF 01 06(每个字节[8位]代表一个数字)

压缩从第一个数字开始,然后只将差异写入下一个数字(差异是半字节 [4 位])。从C9到CB的例子:差值=2。如果差值大于7,不能用半字节表示,我们用0x8来标记一个新的开始。0xFF-0xCB > 7 所以序列看起来像这样(整个压缩代码):

C9 28 FF 15(整个字节(0xC9和0xFF)的混合代表数字和代表与下一个数字的差异的半字节。现在解决我的问题。我正在使用fstream并将字节写入新文件,半字节被存储以组合对可以写入文件的字节的另一个半字节。但是它仅适用于小于 128 的字节,因此我无法将大于 0x7F 的值写入文件。我用记事本 ++ 准备了一个以值 0xFF 开头的文件-阅读该值效果很好,但是dest.put(source.get());在那种特定情况下不会。如何在 C++ 中使用(有符号的)半字节 [用于负差异] 和数字的二进制表示?顺便说一句,在 file.put() 中使用负数会导致奇怪的行为,因为写入的是 2 个字节而不是 1 个字节。这是我的代码,希望您能理解我的问题,非常感谢您的帮助

0 投票
2 回答
771 浏览

java - 将 Nibble 添加到字节数组中

我在 Java 中有一个 9 字节的数组,但我的函数需要返回一个大小为 10 的数组。我需要用 Nibbles 填充差异。

如果一个半字节是一个字节的一半,我可以简单地在最后添加一个(字节)0 到数组中,还是添加 2 个半字节会有所不同?在这种情况下,2 个半字节和一个(字节)0 之间有区别吗?

0 投票
2 回答
10558 浏览

python - Python将字节分成高半字节和低半字节

我正在尝试使用 pyserial 发送和接收 rs232 数据,但我不明白如何正确发送正确的数据。我有什么小信息解释了数据字符串,并说它应该分成高半字节和低半字节。转换为小食是我没有得到的部分,我试图阅读它,但不知道如何在我的情况下使用它。

所以我有这个数据字符串要通过串行发送。10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,00,50

它说将字节分成高半字节和低半字节,然后将 21 个字节转换为 42 个字符的数据字符串。

有人可以帮我解释一下如何为我做这件事吗?

0 投票
1 回答
238 浏览

ruby - 将十六进制值分配给字节的低半字节

我正在做一个整合,我有一个领域的以下条件:

如果数据的长度是奇数,则最后一个字节的低半字节被赋值为十六进制“F”。这个用于填充的十六进制“F”确保整个字节数用于字段并且不包括在项目的长度中。

我尝试附加十六进制 F,但这是错误的:

我想我需要获取最后一个字节并对其执行一些魔术,可能是一些按位操作:

如果有人能指出我正确的方向,我会很高兴。

0 投票
1 回答
208 浏览

bit-shift - 通过位操作确定扑克手牌强度

我正在关注这个:Optimizing hand-evaluation algorithm for Poker-Monte-Carlo-Simulation

我的设置是类似的——一个无符号的 long 来代表棋盘和玩家的持股。所有卡片都是位标志,从 1 开始,到 2^51 结束。

例如,2c 是 1,3c 是 16,4c 是 256,As 是 2^51。于是,手

1010 0000 1001 0000 0000 0100 0000 0001 0000 0000 0010 是

Qs Qd 7h 5c 2d(棋盘)+ Ts Tc(玩家的持牌)。

我提到的链接很好地解释了如何找到同花顺 / 四同花顺,并且它有效。但是,我似乎在试图识别其中的三个时碰了壁。我试过了:

  • hand & (hand >> 1) & (hand >> 2) & 0x1111111111111111 - 天真的情况,遵循链接中的示例;

  • hand & (hand >> 2) & 0x3333333333333333 -- 这似乎抓住了所有三种,但它错误地将对(例如上面的例子)分类为行程;

  • 及其变体。

如何消除少于三个设置位的所有半字节?

0 投票
2 回答
1334 浏览

java - What is the purpose of low and high nibble when converting a string to a HexString

Recently I have been going through some examples of MD5 to start getting an understanding of security and MD5 has been fairly simple to understand for the most part and a good starting point even though it is no longer secure. Despite this I have a question regarding high and lo nibbles when it comes to converting a string to a hex string.

So I know high and low nibbles are equal to half a byte or also can be hex digits that represent a single hexadecimal digit. What I am not understanding though is exactly how they work and the purpose that they serve. I have been searching on google and I can't find much of an answer that will help explain what they do in the context that they are in. Here is the context of the conversion:

I don't exactly understand what is going on in the for statement. I would appreciate any help understanding this and if there is some link to some places that I can learn more about this please also leave it.

I understand the base definition of nibble but not the operations and what the assignment to the number 4 is doing either.

If I need to post the full example code I will just ask as I am unsure if it is needed.

0 投票
0 回答
44 浏览

flash - Nibble transposed when storing binary files

I have some code that populates some binary data into a ByteBuffer, and then writes it to the disk using a FileChannel. Everything works great, and when I use hexdump on the file, I expect to see bytes stored in little-endian byte order (because my system uses the x86_64 instruction set). But instead, I see that the nibbles are transposed. What am I missing? Is this a quirk of the hexdump utility?

Integer in code: 0x01020304 (declared as private int myNumber = 0x01020304;)

Expected order in storage: 0x04 x03 x02 x01

Actual order in storage: 0x30 x40 x10 x20

0 投票
0 回答
253 浏览

c - 打印一个包含所有十六进制数字和 n 个半字节的数组

我正在尝试编写一个执行以下操作的程序:“接收输入 (N) 并输出一个包含所有十六进制的数组,其中'N'Nibbles 按升序排列。”

为此,我创建了一个主函数

函数 outhexdecimals 将根据 n 的输入值创建一个数组,将其按升序排列,然后输出该数组。

我的问题是:我不知道如何将十进制数转换为十六进制,也就是说'009',我不知道如何'00A'在数组上输出值。

有没有办法通过转换十进制值来做到这一点?

非常感谢在此问题上提供的任何帮助。

谢谢。

0 投票
1 回答
365 浏览

php - 如何在php中对半字节/四分体执行二进制操作?

所以,我有从 0 到 15 的数值,所以我将它们保存为十六进制代码(0 到 f)。现在我有一串数据,其中包含我的半字节的十六进制代码值。

数据如下所示:

a0fc3d78270db962e4ba525cf3acd

在两个半字节上执行二进制异或的准确/优雅/快速方法是什么?在半字节上执行二进制的最快方法是什么?

我现在想到的是首先将半字节转换为完整字节:

然后对这些字节执行所需的操作(异或或不),并再次将结果值重新转换为半字节。

这种方法的问题是,如果我对一个字节应用 not (~) 操作,它也会反转前 4 位(因此将 1111 添加到半字节的左侧),我必须进入额外的复杂性从结果的 ord() 值中减去 240,然后我使用上面提供的代码将其重新转换为半字节。这不仅让以后的代码升级变得很麻烦,而且也让以后更难解释代码的功能。

执行按位异或而不是半字节并将结果值作为十六进制代码(字符串)的最佳/准确方法是什么?

例子:

0 投票
1 回答
378 浏览

c# - C# 中的字节到半字节到字到字节

我有一个 3 字节数组,我需要

  • 将每个字节转换为 Nibbles
  • 添加 Byte_0.Nibble_0 + Byte_0.Nibble_1 + Byte_1.Nibble_2 作为 WORD
  • 添加 Byte_1.Nibble_0 + Byte_2.Nibble_1 + Byte_2.Nibble_2 作为 WORD
  • 将每个 WORD 转换为字节数组

在此处输入图像描述

这是我尝试过的

获取 Nibble 扩展:

如图所示,我做得对吗?如果没有,任何人都可以帮助我使用正确的代码吗?