BYTE转16进制的问题

linlias12 2014-04-28 10:43:00
比如我有一个byte数组,里面放了1个大于16的byte值
用Integer.toHexString()方法将Byte转成16进制字符串后,用getBytes().length()方法查看是2个字节长度啊,可是为什么网上都说是2个16进制表示1个字节呢?
...全文
405 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
张含韵 2014-06-03
  • 打赏
  • 举报
回复
引用 4 楼 linlias12 的回复:
还是有些迷糊,比如有16进制报文如下: "007C3031323345......" 正常来讲的话,这是一个字符串,长度是多少就是多少,但是读的时候要2个字节读作一个字节,我知道该这么处理,但是就是不理解。 007C是16进制下的报文长度,后面跟的是0123F,但是既然是16进制字符串,那007C就是占4个字节吧?为什么要看成2个字节?
这一串数字不是字符串,是01代码的另一种表示形式,和字符串有本质区别,楼主别把一串就当作字符串了。007c其实是0000000001111110
vnvlyp 2014-06-03
  • 打赏
  • 举报
回复
引用 4 楼 linlias12 的回复:
还是有些迷糊,比如有16进制报文如下: "007C3031323345......" 正常来讲的话,这是一个字符串,长度是多少就是多少,但是读的时候要2个字节读作一个字节,我知道该这么处理,但是就是不理解。 007C是16进制下的报文长度,后面跟的是0123F,但是既然是16进制字符串,那007C就是占4个字节吧?为什么要看成2个字节?
两个16进制数表示一个字节,一个字节的范围是0~255,而一个16进制数字的范围是0~15,所以需要两个16进制才能完整表示一个字节。 另外007C怎么会是4个字节,都跟你说了这是16进制数,是数!!!数!!!比如说10进制int型整数123456,难道占用6个字节?
linlias12 2014-06-03
  • 打赏
  • 举报
回复
还是有些迷糊,比如有16进制报文如下: "007C3031323345......" 正常来讲的话,这是一个字符串,长度是多少就是多少,但是读的时候要2个字节读作一个字节,我知道该这么处理,但是就是不理解。 007C是16进制下的报文长度,后面跟的是0123F,但是既然是16进制字符串,那007C就是占4个字节吧?为什么要看成2个字节?
linlias12 2014-06-03
  • 打赏
  • 举报
回复
引用 8 楼 vnvlyp 的回复:
[quote=引用 7 楼 linlias12 的回复:] [quote=引用 5 楼 vnvlyp 的回复:] [quote=引用 4 楼 linlias12 的回复:] 还是有些迷糊,比如有16进制报文如下: "007C3031323345......" 正常来讲的话,这是一个字符串,长度是多少就是多少,但是读的时候要2个字节读作一个字节,我知道该这么处理,但是就是不理解。 007C是16进制下的报文长度,后面跟的是0123F,但是既然是16进制字符串,那007C就是占4个字节吧?为什么要看成2个字节?
两个16进制数表示一个字节,一个字节的范围是0~255,而一个16进制数字的范围是0~15,所以需要两个16进制才能完整表示一个字节。 另外007C怎么会是4个字节,都跟你说了这是16进制数,是数!!!数!!!比如说10进制int型整数123456,难道占用6个字节?[/quote] 但是这个16进制报文正常打印长度的话,比如30就是2个字节长度啊,是不是说不能把他当成字符串了?要转化回10进制后的字符串才算了?[/quote] 那是字符串长度,用字符串表示只是方便处理,比如一个整数123456占用4个字节,写成字符串“123456”当然长度是6,但并不代表这个数是6个字节[/quote] 哦,那通常报文中的长度,指的不是字符串的长度吗?就是弄得报文这一块,长度这里就晕了。
vnvlyp 2014-06-03
  • 打赏
  • 举报
回复
引用 7 楼 linlias12 的回复:
[quote=引用 5 楼 vnvlyp 的回复:] [quote=引用 4 楼 linlias12 的回复:] 还是有些迷糊,比如有16进制报文如下: "007C3031323345......" 正常来讲的话,这是一个字符串,长度是多少就是多少,但是读的时候要2个字节读作一个字节,我知道该这么处理,但是就是不理解。 007C是16进制下的报文长度,后面跟的是0123F,但是既然是16进制字符串,那007C就是占4个字节吧?为什么要看成2个字节?
两个16进制数表示一个字节,一个字节的范围是0~255,而一个16进制数字的范围是0~15,所以需要两个16进制才能完整表示一个字节。 另外007C怎么会是4个字节,都跟你说了这是16进制数,是数!!!数!!!比如说10进制int型整数123456,难道占用6个字节?[/quote] 但是这个16进制报文正常打印长度的话,比如30就是2个字节长度啊,是不是说不能把他当成字符串了?要转化回10进制后的字符串才算了?[/quote] 那是字符串长度,用字符串表示只是方便处理,比如一个整数123456占用4个字节,写成字符串“123456”当然长度是6,但并不代表这个数是6个字节
linlias12 2014-06-03
  • 打赏
  • 举报
回复
引用 5 楼 vnvlyp 的回复:
[quote=引用 4 楼 linlias12 的回复:] 还是有些迷糊,比如有16进制报文如下: "007C3031323345......" 正常来讲的话,这是一个字符串,长度是多少就是多少,但是读的时候要2个字节读作一个字节,我知道该这么处理,但是就是不理解。 007C是16进制下的报文长度,后面跟的是0123F,但是既然是16进制字符串,那007C就是占4个字节吧?为什么要看成2个字节?
两个16进制数表示一个字节,一个字节的范围是0~255,而一个16进制数字的范围是0~15,所以需要两个16进制才能完整表示一个字节。 另外007C怎么会是4个字节,都跟你说了这是16进制数,是数!!!数!!!比如说10进制int型整数123456,难道占用6个字节?[/quote] 但是这个16进制报文正常打印长度的话,比如30就是2个字节长度啊,是不是说不能把他当成字符串了?要转化回10进制后的字符串才算了?
xuhu_it 2014-05-03
  • 打赏
  • 举报
回复
楼主去学习一下补码的知识吧 一个字节是8位 如你说的16 实际上为: 0001 0000 一个16进制的数字的范围为0-15 而每个4位都可以存放一个16进制的数字
rumlee 2014-04-29
  • 打赏
  • 举报
回复

  String s = "FF";
  byte b = (byte)0xFF;
这两个是有区别的,一个是字符串,一个是字节,字符串s占用的是两个字节,而字节b占用的是一个字节。 Integer.toHexString()获取的就是字符串
haorengoodman 2014-04-29
  • 打赏
  • 举报
回复
16进制数 转2进制 要用4位表示。两个16进制数 转换为2进制后 就是 8位,一个字节刚好就是8位,所以两个16进制数表示一个字节

62,620

社区成员

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

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