我正在将字节数据转换为String并将此字符串转换回byte.However当我尝试将此字符串转换回字节时,我无法检索字节数据。我知道我正在做一些非常愚蠢的事情。有人可以告诉我这是什么错误吗?以下是我在java中的代码
Log.e("byte data",""+byte_data[3]); //70
Log.e("data in string",""+Integer.toBinaryString(byte_data[3])); //1000110
String data=Integer.toBinaryString(byte_song[3]);
Log.e("byte data",""+data.getBytes());
然而,dat.getBytes()会返回[B @ 414eaa48,但是它本应该给我70。
答案 0 :(得分:2)
getBytes
返回byte
数组,数组的toString
方法不显示其内容(有时可能会令人讨厌)。请尝试Arrays.toString
来显示数组的内容。请注意,对于x
对象,"" + x
相当于x.toString()
。
答案 1 :(得分:1)
dat.getBytes()
提供了一个字节数组,它本身就是java中的一个对象。每当您尝试打印该对象或致电toString()
时,它都会调用toString()
类的java.lang.Object
方法。在java.lang.Object
班toString()
中定义如下:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这就是你得到这样的输出的原因。实现你想要的目标
Log.e("byte data",""+dat.getBytes());
应更改为
Log.e("byte data",""+java.util.Arrays.toString(dat.getBytes()));
的更新强>
要获得70
,您应该使用:
Log.e("byte data",""+Integer.parseInt(String.valueOf(byte_data[3]),10));
或强>
Log.e("byte data",""+Integer.parseInt(data,2));
要知道它是如何工作的,请看这里 Integer.parseInt(String s, int radix)