我在 Java 中有一个 9 字节的数组,但我的函数需要返回一个大小为 10 的数组。我需要用 Nibbles 填充差异。
如果一个半字节是一个字节的一半,我可以简单地在最后添加一个(字节)0 到数组中,还是添加 2 个半字节会有所不同?在这种情况下,2 个半字节和一个(字节)0 之间有区别吗?
所以你的问题是,与 nibble 0000 相邻的 nibble 0000 是否等于 byte 00000000 ?
是的。
当您像这样写下各个位时,我认为应该很明显。
仅当您使用部分字节存储数据时,才会需要使用部分字节进行填充。例如,假设我将字符集限制为仅 az、AZ、0-9 和空格字符。这将使我能够只使用 4 位来编码每个字符。
如果一个半字节是一个字节的一半,我可以简单地在最后添加一个(字节)0 到数组中,还是添加 2 个半字节会有所不同?
在这种情况下,2 个半字节和一个(字节)0 之间有区别吗?
没有区别,因为一个字节(8 位)由 2个半字节(4 位)组成。
我什至可以将 8.5 位放入一个字节数组中,然后检查数组的“长度”并取回 8.5 作为值吗?
对于 8.5 位?此时它将以 2 个字节的长度返回。如果您的意思是 8.5 个字节,那么它会以 9 个字节返回。
记住最小的数据类型是 a byte
not a nibble
!! 通过声明一个类型byte
(即使没有分配值),您已经自动生成了 8 位0000 0000
. 半字节只是更容易可视化字节值中的位(当以十六进制表示法编写时)。
例如,单字节值0xF0
可以可视化为1111 0000
. 现在对于一个字节0xBA
,如果您只想要一个半字节,则必须将字节设置为0x0B
or 0x0A
...
我在 Java 中有一个 9 字节的数组,但我的函数需要返回一个大小为 10 的数组。我需要用 Nibbles 填充差异。
您的函数返回 80 位。使用 9 个字节,您总共将拥有 72 位,因此您可以使用额外的 8 位进行填充,这意味着增加一个字节的额外zero
值(例如:)0x00
。
在某些8 字节和半字节的情况下,您实际上应该创建 9 字节(72 位),但只更新前 68 位(8.5 字节)。
最好的逻辑是只声明一个长度为 10 的字节数组(即: 80 个零位)。然后,您可以在此总分配空间内根据需要更新尽可能多或尽可能少的位。
这样,“我有一个 9 个字节的数组”变成了“我创建了一个 10 个字节的数组,并且只更新了 9 个甚至 8.5 个字节”,这使您可以自动填充那些未使用的 1 个或 1.5 个字节。