如何将十六进制字符串转换为字节。 Java的

时间:2014-04-05 00:56:49

标签: java

我的问题是,我必须编写一个代码,其中必须通过键盘写入MAC方向,然后代码必须识别它以安装" Magic Packet"。

让我展示一些代码,这样你就可以更好地理解我的问题并找到解决方案。

static String realMAC[] = new String [6];
static String mac; //that's the written string

private DatagramPacket buildWOLPacket(InetAddress address,String MAC) {
    String splittedMAC[] = new String[12];

    final int SIZE = 6 + 6 * 16; // See above for this magic number

    byte data[] = new byte[SIZE];

    for (int i = 0; i < 6; i++) {
        data[i] = (byte) 0xff;
    }
   //Method where each character written
   //is stored into a char array (realMAC[])
   for (int i = 0 ; i<12; i++) {
        String replacedMAC = MAC.replace(":", ""); //Here I delete all the : from the MAC adress introduced via keyboard.
        if (i == 12)
            splittedMAC[i] = replacedMAC.substring(i,(i));
        else splittedMAC[i] = replacedMAC.substring(i,(i+1));}

现在是给我提问的代码

 //All the (byte) 0x00 and so on are examples of a MAC direction and how to convert it if it is predefined
 data[6 * i + 0] = Byte.parseByte(realMAC[0]);    //(byte) 0x00;

 data[6 * i + 1] = Byte.parseByte(realMAC[1]);   //(byte) 0x1A;

 data[6 * i + 2] = Byte.parseByte(realMAC[2]);   //(byte) 0x09;

 data[6 * i + 3] = Byte.parseByte(realMAC[3]);   //(byte) 0x07;

 data[6 * i + 4] = Byte.parseByte(realMAC[4]);   //(byte) 0x8c;

 data[6 * i + 5] = Byte.parseByte(realMAC[5]);   //(byte) 0xe9;

我的问题是将realMAC []转换为字节,因为x和来自(0x8c的字母),因为parseByte只接受int和ascii代码。我怎么能把十六进制形式的字符串转换成位?

非常感谢你。

2 个答案:

答案 0 :(得分:0)

Byte也有一个.parseByte() method taking a radix作为参数。但是,这不会考虑最初的0x,因此您必须使用substring()。做:

Byte.parseByte(realMac[0].substring(2), 16)

//etc etc

更一般地说,所有“数字积分”类(IntegerShortLong)都有这样的方法。

答案 1 :(得分:0)

Byte.decode接受可能以String0x开头的0X。 (它也可以解析小数或八进制数,具体取决于字符串的外观。)