Java 将特定字符串转换为字节[]
我正在尝试将特定字符串转换为字节[] 字符串如下所示: 55层5楼及以上 这是我为它写的方法,希望有人能告诉我哪里错了,或者有更好的解决方案Java 将特定字符串转换为字节[],java,string,byte,Java,String,Byte,我正在尝试将特定字符串转换为字节[] 字符串如下所示: 55层5楼及以上 这是我为它写的方法,希望有人能告诉我哪里错了,或者有更好的解决方案 public static byte[] stringToByte(String text) { //byte[] length ==> String (length+1)/3 byte raw[] = new byte[(text.length() + 1) / 3]; int j = 0; for (int i =
public static byte[] stringToByte(String text) {
//byte[] length ==> String (length+1)/3
byte raw[] = new byte[(text.length() + 1) / 3];
int j = 0;
for (int i = 0; i < text.length(); i += 2) {
String h = "";
h += text.charAt(i);
h += text.charAt(i + 1);
i++;
raw[j] = Byte.valueOf(h);
j++;
}
return raw;
}
看起来你只是在一个空格分隔的字符串中循环,然后解析出字节对象。在这种情况下,我建议使用以下方法:
String text = "";
String[] strArr = text.split(" ");
for (String str: strArr)
{
//convert string to byte here
}
这将有助于:
public static byte[] stringToByte(String text) {
final String[] split = text.split("\\s+");
final byte[] result = new byte[split.length];
int i = 0;
for (String b : split) result[i++] = (byte)Integer.parseInt(b, 16);
return result;
}
为什么?byte
是一个有符号的量,您不能将超出其范围的任何内容直接解析为byte
。但是,如果您解析一个int
,然后使用缩小转换为字节
,您将得到您的结果。字节[]原始=新字节[text.length()>>1];
byte[] raw = new byte[text.length() >> 1];
for(int i=0; i<text.length();i+=2){
raw[i >> 1] = Integer.parseInt(text.substring(i, i+2),16);
}
对于(inti=0;i>1]=Integer.parseInt(text.substring(i,i+2),16);
}
我使用了
Integer.parseInt()
而不是Byte.parseByte()
,因为字节不是无符号字节。我使用String text=“5555555 fff”
尝试了它,您也可以对每个令牌使用StringTokenizer
public static byte[] stringToByte(String text) {
StringTokenizer st = new StringTokenizer(text);
byte raw[] = new byte[st.countTokens()];
for (int i = 0; i < raw.length; i++) {
raw[i] = (byte) Integer.parseInt(st.nextToken(), 16);
}
return raw;
}
公共静态字节[]字符串字节(字符串文本){
StringTokenizer st=新的StringTokenizer(文本);
字节原始[]=新字节[st.countTokens()];
for(int i=0;i
不抱歉,这是错误的。当我使用“raw=text.getBytes();”时,我得到一个有14个位置的数组,但我需要一个有5个位置的数组,就像我问题中的最后一个代码块一样。如果你看一下Byte.valueOF
的文档,它会指向parseByte
,上面写着字符串中的字符必须全部为十进制数字,但第一个字符可以是ASCII减号“。这就是为什么当你给它一个F
时它会爆炸。哦,现在我明白了-我认为这一个合适:你的代码产生类型不匹配:不能从int转换到byte
,但很容易修复。@MarkoTopolnik oops,用GroovyConsole
对它进行了测试吗?java.lang.NumberFormatException:值超出范围。值:“F5”基数:16
但不是一个需要修正的大问题。
public static byte[] stringToByte(String text) {
StringTokenizer st = new StringTokenizer(text);
byte raw[] = new byte[st.countTokens()];
for (int i = 0; i < raw.length; i++) {
raw[i] = (byte) Integer.parseInt(st.nextToken(), 16);
}
return raw;
}