我的问题是,我必须编写一个代码,其中必须通过键盘写入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代码。我怎么能把十六进制形式的字符串转换成位?
非常感谢你。
答案 0 :(得分:0)
Byte
也有一个.parseByte()
method taking a radix作为参数。但是,这不会考虑最初的0x
,因此您必须使用substring()
。做:
Byte.parseByte(realMac[0].substring(2), 16)
//etc etc
更一般地说,所有“数字积分”类(Integer
,Short
,Long
)都有这样的方法。
答案 1 :(得分:0)
Byte.decode
接受可能以String
或0x
开头的0X
。 (它也可以解析小数或八进制数,具体取决于字符串的外观。)