华为机试题:将十六进制字符串形式内容转为内存值形式(java)

描述: 

请实现如下接口  

  

/* 功能:将十六进制字符串形式内容转为内存值形式(注:pBuffer的内存申请由调用者保证)

     * 输入:szHexText:十六进制字符串形式,如: "6566"

     * 输出:dataOutput,其中:内存值形式Buffer,即内存的{0x65, 0x66}

     * 返回:返回转换成功的buffer的有效字节数

     */

    public static int[] hexToBin(String szHexText)

    {

        /* 请实现 */

        return null;

    }

约束:

  1. pBuffer的内存申请由调用者保证

  2. pszHexText中从左向右一定要两个有效的16进制字符才能转为一个内存值,“655”只能转为{0x65}

  3. 16进制字符的范围为[‘0’-‘9’],[‘A’-‘F’], [‘a’-‘f’]

  4. 需要过滤掉字符串中间的非16进制字符后,即”65#4#3”=> {0x65,0x43} 

 

 


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;
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dmfrm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值