为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 2019-06-26 16:39:27
如何将字节数组转换为字符串,反之亦然?我必须在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);我被困在这个问题上了。
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

您的字节数组必须有一些编码。如果有负值,则编码不能是ASCII。一旦找出了这一点,就可以使用以下方法将一组字节转换为字符串:

byte[] bytes = {...}String str = new String(bytes, "UTF-8"); // for UTF-8 encoding

有一堆编码可以使用,请查看Sun javadocs.


查看完整回答
反对 回复 2019-06-26
?
噜噜哒

TA贡献1784条经验 获得超7个赞

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

如果您真的必须使用String要保存二进制数据,最安全的方法是使用基准64编码。


查看完整回答
反对 回复 2019-06-26
?
绝地无双

TA贡献1946条经验 获得超4个赞

根本的问题是(我认为)你无意中使用了一个字符集,其中:

 bytes != encode(decode(bytes))

在某些情况下。utf-8就是这样一个字符集的例子。具体来说,某些字节序列在UTF-8中是无效的编码.如果UTF-8解码器遇到这些序列中的一个,它很容易丢弃这些违规的字节,或者将它们解码为Unicode码点,作为“没有这样的字符”的编码点。当然,当您尝试将字符编码为字节时,结果将是不同的。

解决办法是:

  1. 明确您正在使用的字符编码;即使用字符串构造函数和

    String.toByteArray

    方法具有显式字符集。
  2. 对字节数据使用正确的字符集.或者选择一个(例如“拉丁语-1”,其中所有字节序列都映射到有效的Unicode字符)。
  3. 如果您的字节是(真的)二进制数据,并且您希望能够通过“基于文本的”通道发送/接收这些数据,请使用类似base 64编码的方法.

    就是为了这个目的而设计的.


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 2652 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号