作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想计算比特币区 block 的大小我看到了主题:link here ,在一个回复中,有人说“merkle root hash - 32 bytes”
然后我去了这个街区:link here
默克尔根为:8f5318a45316efedf56ebcadd55889ab377ba78d9a8ac14a81a83e52ad45e07f
我尝试计算根,但我发现它是 64 字节。
我计算字节的方式:
byte[] bytes1 = "Here merkle root".getBytes();
System.out.println(bytes1.length);
结果是 64 而不是 32
最佳答案
merkle 根为 32 字节,以十六进制编码(使用 0-9a-z)表示。这意味着将使用两个字符来表示每个字节,并且结果字符串的字符数将是原始数据字节数的两倍。
您无法通过执行 getBytes()
将字符串转换为字节,因为它获取表示字符串的字节。
您可以使用 BigInteger 将字符串解析为数字(一个大数字),也可以手动或使用外部库(不包含在 JDK 中)将字符串解析为字节数组。
public static void main(String[] args) {
String merkle = "8f5318a45316efedf56ebcadd55889ab377ba78d9a8ac14a81a83e52ad45e07f";
System.out.println("String length: " + merkle.length());
System.out.println("Actual decimal value: " + new BigInteger(merkle, 16));
byte[] bytes = toBytes(merkle);
System.out.println("Total bytes: " + bytes.length);
System.out.println("Actual bytes: " + Arrays.toString(bytes));
}
private static byte[] toBytes(String input) {
byte[] result = new byte[input.length() / 2];
for (int i = 0; i < result.length; i++) {
result[i] = (byte)((Character.digit(input.charAt(i * 2), 16) << 4)
+ Character.digit(input.charAt(i * 2 + 1), 16));
}
return result;
}
关于java - 我想计算比特币区 block 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48429875/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!