描述: | 请实现如下接口
/* 功能:将十六进制字符串形式内容转为内存值形式(注:pBuffer的内存申请由调用者保证) * 输入:szHexText:十六进制字符串形式,如: "6566" * 输出:dataOutput,其中:内存值形式Buffer,即内存的{0x65, 0x66} * 返回:返回转换成功的buffer的有效字节数 */ public static int[] hexToBin(String szHexText) { /* 请实现 */ return null; } 约束:
|
package huawei;
public final class Demo {
/* 功能:将十六进制字符串形式内容转为内存值形式(注:pBuffer的内存申请由调用者保证)
* 输入:szHexText:十六进制字符串形式,如: "6566"
* 输出:dataOutput,其中:内存值形式Buffer,即内存的{0x65, 0x66}
* 返回:返回转换成功的buffer的有效字节数
*/
public static int[] hexToBin(String szHexText)
{
/* 请实现 */
if (szHexText == "" || szHexText == null )
{
return null;
}
/*过滤掉非十六进制字符*/
String text = "";
char ch = 0;
for(int i = 0; i < szHexText.length(); i++)
{
ch = szHexText.charAt(i);
if((ch >= '0' && ch <= '9') ||
(ch >= 'A' && ch <= 'F') ||
(ch >= 'a' && ch <= 'f'))
{
text += ch;
}
}
/*当长度小于2的时候,应该返回null*/
if(text.length() < 2)
{
return null;
}
int count = 0;
char ch1 = 0, ch2 = 0;
int num = 0;
int[] dataOutput = new int[text.length() / 2];
for(int i = 0; i < text.length() && i + 1 < text.length(); i = i+ 2 )
{
ch1 = text.charAt(i);
ch2 = text.charAt(i+1);
/*把这两个十六进制字符,转换为十进制*/
if (ch1 >= '0' && ch1 <= '9')
{
num = ((int)(ch1 - '0')) * 16;
}
else if (ch1 >= 'A' && ch1 <= 'F')
{
num = ((int)(ch1 - 'A') + 10) * 16;
}
else
{
num = ((int)(ch1 - 'a') + 10) * 16;
}
/*把这两个十六进制字符,转换为十进制*/
if (ch2 >= '0' && ch2 <= '9')
{
num += (int)(ch2 - '0');
}
else if (ch2 >= 'A' && ch2 <= 'F')
{
num = num + 10 + (int)(ch2 - 'A');
}
else
{
num = num + 10 + (int)(ch2 - 'a');
}
dataOutput[count++] = num;
}
return dataOutput;
}
}