关于16进制字符串转字节byte的问题

CocoPig 2014-12-16 11:05:54
假设我有一串长度为8的字符串"2E17CDF3",我想两两组成一个字节,生成长度为4的字节数组。该如何实现??我百度了一下,所有描述该信息的文章全都是复制的同一段代码,好像有错误的,我照代码运行输入2E17CDF3得到的是-64, 96, 16, -64。代码如下:

/**
* 将两个ASCII字符合成一个字节; 如:"EF"--> 0xEF
* @param src0 byte
* @param src1 byte
* @return byte
*/
public static byte uniteBytes(byte src0, byte src1) {
byte _b0 = Byte.decode("0x" + new String(new byte[] { src0 }))
.byteValue();
_b0 = (byte) (_b0 << 4);
byte _b1 = Byte.decode("0x" + new String(new byte[] {src1} ))
.byteValue();
_b1 = (byte) (_b1 << 4);
byte ret = (byte) (_b0 ^ _b1);
return ret;
}
/**
* 将指定字符串src,以每两个字符分割转换为16进制形式 如:"2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF, 0xD9}
* @param src String
* @return byte[]
*/
public static byte[] HexString2Bytes(String src) {
byte[] ret = new byte[4];
byte[] tmp = src.getBytes();
for (int i = 0; i < 4; i++) {
ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
}
return ret;
}

...全文
199 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CocoPig 2014-12-16
  • 打赏
  • 举报
回复
是我搞错了。。。
CocoPig 2014-12-16
  • 打赏
  • 举报
回复
楼上,我运行你的代码输出的是 46 23 -51 -13
healer_kx 2014-12-16
  • 打赏
  • 举报
回复
String a = "2E17CDF3"; String[] bs = a.replaceAll("[\\w]{2}", "$0,").split(","); ArrayList<Byte> s = new ArrayList<Byte>(); for (String b : bs) { int b1 = Integer.parseInt(b, 16); s.add((byte)b1); } Byte[] bs2 = (Byte[])s.toArray(new Byte[0]); for (Byte b : bs2) System.out.println(b);
CocoPig 2014-12-16
  • 打赏
  • 举报
回复
上面的代码我贴错了,里面有我改动过的。网上找来的代码应该如下,输入2E17CDF3 输出46, 23, -51, -13

/** 
* 将两个ASCII字符合成一个字节; 
* 如:"EF"--> 0xEF 
* @param src0 byte 
* @param src1 byte 
* @return byte 
*/ 
public static byte uniteBytes(byte src0, byte src1) { 
byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue(); 
_b0 = (byte)(_b0 << 4); 
byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue(); 
byte ret = (byte)(_b0 ^ _b1); 
return ret; 
} 

/** 
* 将指定字符串src,以每两个字符分割转换为16进制形式 
* 如:"2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF, 0xD9} 
* @param src String 
* @return byte[] 
*/ 
public static byte[] HexString2Bytes(String src){ 
byte[] ret = new byte[8]; 
byte[] tmp = src.getBytes(); 
for(int i=0; i<8; i++){ 
ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]); 
} 
return ret; 
} 

62,634

社区成员

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

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