String 转为字节数组byte【】 如何存储

qq_35357150 2016-09-20 11:57:35
byte[] b="我是一个兵".getBytes("GBK");
由于GBK中汉字 ‘我’ 占两个字节,那么是否b[0]和b[1]保存的是 ‘我’ 字符的低8位和高8位。
怎样在数组b中还原得到‘我’;

测试:
byte[] b="我是一个兵".getBytes("GBK");
//输出结果为:-50
System.out.println(b[0]);
//输出结果为:-46
System.out.println(b[1]);
char a='我';
//输出结果为:0110 0010 0001 0001
System.out.println(Integer.toBinaryString(a));
从第2个结果来看b【1】的最高位为1,可见不是简单的保存8位或16位。真心求解
...全文
535 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2016-09-26
  • 打赏
  • 举报
回复
在Java里,字符串缺省是以 Unicode 进行存储的,不是GBK 在Java里,数值类型没有无符号数,全部是有符号数,因此 byte 类型当最高位为1时,直接打印会转换为负整数 Unicode 编码没有仔细研究过,但从代码上看,应该会有一个 0xFEFF 开头的起始标记

		byte[] buff = "我是一个兵".getBytes("Unicode");
		
		for(byte b : buff){
			System.out.print(Integer.toHexString(0xFF & b));
			System.out.print(" ");
		}
		System.out.println();
		
		short s = '我';
		System.out.println(Integer.toHexString(0xFFFF & s));
输出: fe ff 62 11 66 2f 4e 0 4e 2a 51 75 6211
kiyoki 2016-09-24
  • 打赏
  • 举报
回复
我帮你改改吧 byte[] b="我是一个兵".getBytes("UTF-16"); //输出结果为:-50 System.out.println(b[2]); //输出结果为:-46 System.out.println(b[3]); char a='我'; //输出结果为:0110 0010 0001 0001 System.out.println(Integer.toBinaryString(a));
lucifarcyl 2016-09-21
  • 打赏
  • 举报
回复
默认的编码好像不是GBK吧
ps45221 2016-09-21
  • 打赏
  • 举报
回复
你输出的是经过GBK编码之后的数值, 和你直接复制,没有经过getBytes是不一样的,默认的编码应该是ISO-8859的, 所以两者不一致,没验证过,可以验证下!
当作看不见 2016-09-21
  • 打赏
  • 举报
回复
不用管是怎样保存的,比特数组可以直接再转为String ,知道能复原就行了

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧