【发布时间】:2011-09-21 18:11:06
【问题描述】:
在我的字节数组中,我有一个消息的 hash 值,它由一些负值和正值组成。使用(char)byte[i] 语句可以轻松打印正值。
现在我怎样才能得到负值?
【问题讨论】:
-
“作为字符”到底是什么意思?十进制?十六进制:stackoverflow.com/questions/9655181/…
在我的字节数组中,我有一个消息的 hash 值,它由一些负值和正值组成。使用(char)byte[i] 语句可以轻松打印正值。
现在我怎样才能得到负值?
【问题讨论】:
Arrays.toString(byteArray)怎么样?
这是一些可编译的代码:
byte[] byteArray = new byte[] { -1, -128, 1, 127 };
System.out.println(Arrays.toString(byteArray));
输出:
[-1, -128, 1, 127]
为什么要重新发明轮子...
【讨论】:
byteArray.contentToString()
如果要将字节打印为字符,可以使用 String 构造函数。
byte[] bytes = new byte[] { -1, -128, 1, 127 };
System.out.println(new String(bytes, 0));
【讨论】:
好吧,如果您愿意以十进制打印它,您可以通过掩码将其设为正数:
int positive = bytes[i] & 0xff;
如果您要打印哈希,则使用十六进制会更传统。在 Java 中,关于将二进制数据转换为十六进制字符串的 Stack Overflow 寻址还有很多其他问题。
【讨论】:
试试看:
public static String print(byte[] bytes) {
StringBuilder sb = new StringBuilder();
sb.append("[ ");
for (byte b : bytes) {
sb.append(String.format("0x%02X ", b));
}
sb.append("]");
return sb.toString();
}
例子:
public static void main(String []args){
byte[] bytes = new byte[] {
(byte) 0x01, (byte) 0xFF, (byte) 0x2E, (byte) 0x6E, (byte) 0x30
};
System.out.println("bytes = " + print(bytes));
}
输出:bytes = [ 0x01 0xFF 0x2E 0x6E 0x30 ]
【讨论】:
试试这个:new String(byte[])
【讨论】:
byte[] buff = {1, -2, 5, 66};
for(byte c : buff) {
System.out.format("%d ", c);
}
System.out.println();
得到你
1 -2 5 66
【讨论】:
在 Kotlin 中你可以使用:
println(byteArray.contentToString())
【讨论】: