java中hex转byte问题
2015-08-23 20:51
387 查看
今天在写个程序,把服务端16进制串再转成base64编码,传给体重硬件,但是碰到个问题,如下:
年龄、性别、身高,这三个数值需要用10进制转16进制,OK,我们用了Integer.toHexString(age)进行处理,这里转出来的是16进制,并且把这三个值拼凑成一个字符串。
那么问题来了,base64位是需要用byte来转的,我们一不小心,直接就使用jdk中字符串.getBytes()方法,完全把16进制字符串的意思改变了,转出来的码也不一样。最后上网才知道hex串需要按照字节一个个去转。
public static byte[] hex2Bytes( String hex ) { if( isEmpty(hex) || hex.length() %2> 0 ) { log.error("hex2Bytes: invalid HEX string:" + hex ); return null; } int len = hex.length() / 2; byte[] ret = new byte[ len ]; int k = 0; for (int i = 0; i < len; i++) { int c = hex.charAt(k++); if( c>='0'&& c<='9' ) c = c-'0'; else if( c>='a'&& c<='f' ) c = c-'a'+ 10; else if( c>='A'&& c<='F' ) c = c-'A'+ 10; else { log.error("hex2Bytes: invalid HEX string:" + hex ); return null; } ret[i]= (byte)(c<<4); c = hex.charAt(k++); if( c>='0'&& c<='9' ) c = c-'0'; else if( c>='a'&& c<='f' ) c = c-'a'+ 10; else if( c>='A'&& c<='F' ) c = c-'A'+ 10; else { log.error("hex2Bytes: invalid HEX string:" + hex ); return null; } ret[i]+= (byte)c; } return ret; }
阅读更多
相关文章推荐
- 编码问题之:java.io.UTFDataFormatException: Invalid byte 2 of 2-byte UTF-8 sequence.
- java中byte[]转换成String类型的问题
- java将byte[]转成文件的问题
- 编码问题之:java.io.UTFDataFormatException: Invalid byte 2 of 2-byte UTF-8 sequence.
- java经典问题:byte b=1、b=b+1、b+=1
- java将byte[]转成文件的问题
- Java 中 byte 类型初始化问题
- 类型转换问题(java会把byte,short和char的运算操作转换为int类型即低精度自动向高精度转换)
- java密钥字符串byte[]传递问题
- java中byte[]转换成String类型的问题
- Android学习心得(19) --- short、byte、Hex、int、ULeb128类型转化Java源码
- java将byte[]转成文件的问题
- java hex binary data to byte array
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- Java中byte[]转String问题
- 有关java中数据类型byte,int的一个小问题
- 【转】java平台的编码问题 getByte()所用编码
- 关于将Java中序列化对象写入byte[]遇到的一些问题及解决方法
- Android 中 -Java中byte[]转String问题
- java中String byte HexString的转换