Java 中字节中的位循环

问题描述 投票:0回答:1

我正在尝试实现 SHA 3 规范中的 right_encode。 https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-185.pdf enter image description here 我要问的具体部分可以在这张图片中找到,它将 int 转换为 byte。

我尝试将其实现为 字节 b =(字节)n; 但是当我使用 1 作为 n 时它输出 0000 0001 这很好,但我想知道如何旋转字节中的位,以便它最终成为 1000 0000 因为在 NIST 文档中,他们将左位作为低位。

java bit-manipulation byte bit
1个回答
0
投票

在本文档描述的 SHA-3 非常具体的上下文中:

在本文档中,位以 Courier New 字体表示。字节通常写成两个 由 ASCII 字符 0 到 9 以及 A 到 F 组成的十六进制数字,前面带有 前缀“0x”。在二进制表示中,字节首先写入低位,而在 十六进制表示时,字节先写入高位数字。例如,0x01 = 10000000 和 0x80 = 00000001。这些位排序约定遵循以下约定 成立于Sec。 FIPS 202 的 B.1。

这种位顺序有些不寻常,与您在程序中表示值的方式无关,而只是它们在文档中的书写方式。您不必(也不应该,因为这会造成不必要的复杂化,并且可能会引入更多错误)在数值变量(例如字节、整数等)中“反向”存储位。您可能需要以二进制形式打印字节,并将最低有效位放在左侧以进行调试,以便更轻松地将您的值与该文档中显示的值进行比较。

通常这种类型的重新排序被称为反转位,而术语旋转通常保留用于循环移位。

© www.soinside.com 2019 - 2024. All rights reserved.