我必须在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);

我陷入了这个问题.

推荐答案

字节数组必须有一些编码.如果有负值,则编码不能为ASCII.一旦你明白了这一点,你可以使用以下方法将一组字节转换成字符串:

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

可以使用的编码有很多,看看Oracle javadocs中支持的编码.

Java相关问答推荐

在没有maven或IDE的情况下从命令行运行PFA模块化应用程序时出现神秘错误

内容处置 destruct 了PSP请求

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

表格栏上的事件过滤器在PFA中不起作用

CSS应用于一个端点,但不应用于Thymeleaf中的另一个端点

为什么Java的代码工作(if condition内部的实例)

为什么我要创建一个单独的互斥体/锁对象?

对某一Hyroby控制器禁用@cacheable

如何获得执行人?

如何找到MongoDB文档并进行本地化?

声明MessageChannel Bean的首选方式

是否为计划任务补偿系统睡眠?

Regex以查找不包含捕获组的行

如何在Java springboot中从一个端点发送多个时间响应?

如何根据配置动态创建N个bean

无限递归Java问题

Java返回生成器的实现

没有Google Play服务,Firebase Auth无法工作

AspectJ编织外部依赖代码,重新打包jar并强制依赖用户使用它

MapStruct记录到记录的映射不起作用