如何将字节数组转换为字符串,反之亦然?

如何将字节数组转换为字符串,反之亦然?

我必须在Android中将字节数组转换为字符串,但是我的字节数组包含负值。

如果再次将该字符串转换为字节数组,则所获得的值与原始字节数组值不同。

我怎样才能得到适当的转换?我用来进行转换的代码如下:

// Code to convert byte arr to str:byte[] by_original = {0,1,-2,3,-4,-5,6};String str1 = new String(by_original);System.out.println("str1 >> "+str1);// Code to convert str to byte arr:byte[] by_new = str1.getBytes();for(int i=0;i<by_new.length;i++) System.out.println("by1["+i+"] >> "+str1);

我被困在这个问题上了。


饮歌长啸
浏览 2653回答 3
3回答

郎朗坤

您的字节数组必须有一些编码。如果有负值,则编码不能是ASCII。一旦找出了这一点,就可以使用以下方法将一组字节转换为字符串:byte[]&nbsp;bytes&nbsp;=&nbsp;{...}String&nbsp;str&nbsp;=&nbsp;new&nbsp;String(bytes,&nbsp;"UTF-8");&nbsp;//&nbsp;for&nbsp;UTF-8&nbsp;encoding有一堆编码可以使用,请查看Sun javadocs.

噜噜哒

之间的“适当转换”byte[]和String是显式地声明要使用的编码。如果您以byte[]实际上它不包含文本数据不是“适当的转换”。StringS代表文字,byte[]用于二进制数据,而唯一真正明智的做法是避在他们之间转换,除非你必须这样做。如果您真的必须使用String要保存二进制数据,最安全的方法是使用基准64编码。

绝地无双

根本的问题是(我认为)你无意中使用了一个字符集,其中:&nbsp;bytes&nbsp;!=&nbsp;encode(decode(bytes))在某些情况下。utf-8就是这样一个字符集的例子。具体来说,某些字节序列在UTF-8中是无效的编码.如果UTF-8解码器遇到这些序列中的一个,它很容易丢弃这些违规的字节,或者将它们解码为Unicode码点,作为“没有这样的字符”的编码点。当然,当您尝试将字符编码为字节时,结果将是不同的。解决办法是:明确您正在使用的字符编码;即使用字符串构造函数和String.toByteArray方法具有显式字符集。对字节数据使用正确的字符集.或者选择一个(例如“拉丁语-1”,其中所有字节序列都映射到有效的Unicode字符)。如果您的字节是(真的)二进制数据,并且您希望能够通过“基于文本的”通道发送/接收这些数据,请使用类似base 64编码的方法.就是为了这个目的而设计的.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java