如何在没有转换的情况下将String放入Java中的字节数组

时间:2015-07-31 10:31:55

标签: java

我想将字符串值放入数组字节而不进行任何转换。 字符串长度始终为14,它实际上是一个十六进制值,表示日期和时间。所以这个字符串中的每2个字符都是一个字节,因此我的字节数组长度为7个字节。 我没有找到办法这样做。 <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8" /> <style type="text/css"> #top { background: blue; } #p1 { margin-left: 50%; color: pink; } </style> </head> <body> <div id="top"> <p id="p1">Adan's Website</p> </div> <div id="middle"> <img src="assets/pic.jpg" width="1280" height="720"/> <!-- your image goes here --> </div> <div id="bottom"></div> <script type="text/javascript"></script> </body> </html>方法正在进行转换。 我也尝试了这个方法https://stackoverflow.com/a/11208685/3343174但是在调试之后它显示了与第一个字符串不同的值。

2 个答案:

答案 0 :(得分:2)

您可以像这样获得字符串的两个字符的子字符串:

String yourString = "07df";
String firstByteAsString = yourString.substring(0,2); // start - end(excl.)
                      // = "07"

你可以这样得到一个字节:

byte b = Byte.parseByte( firstByteAsString, 16 );

我相信,您将设法使用它来获得所需的功能。

修改 彼得指出:价值观&gt; 127是一个问题。所以你实际上必须使用

byte b = (byte) (Integer.parseInt( firstByteAsString, 16) & 0xFF);

但他的答案要简单得多,为你做这一切。你应该去BigInteger接受彼得的回答。

答案 1 :(得分:1)

让我们假设您想要将十六进制字符串转换为byte []。例如你有16个字符的十六进制,你想将其转换为字节,其中两个字符代表每个字节。

  

例如我的字符串中的前四个字符是'07df'我希望我的字节数组中的2个第一个字节分别包含'07'和'df'

String base16 = "07df07df07df07";
byte[] bytes = new BigInteger(base16, 16).toByteArray();
if (bytes[0] == 0)
    bytes = Arrays.copyOfRange(bytes, 1, bytes.length);
System.out.println(Arrays.toString(bytes));

打印

[7, -33, 7, -33, 7, -33, 7]
  

我想得到[07,df,07,df,07,df,07]

这是格式化您想要的表单中的byte[]的问题。 (byte) 0xDF-33数字只是数字,它们不记得您用来创建它们的格式,它们只有一种默认格式,如果您不喜欢,它可以添加您自己的格式。

StringBuilder sb = new StringBuilder();
String sep = "[";
for (byte b : bytes) {
    sb.append(sep).append(String.format("%02x", b & 0xFF));
    sep = ", ";
}
sb.append("]");
System.out.println(sb);

打印

[07, df, 07, df, 07, df, 07]