我想将字符串值放入数组字节而不进行任何转换。
字符串长度始终为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但是在调试之后它显示了与第一个字符串不同的值。
答案 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]