字节数字和十六进制的转化

十六进制是由 0~9 及 a~f 共十六个字符组成。
先设一个十六进制的字符数组:
char[] hex = new char[]{
  '0','1','2','3','4','5','6','7',
  '8','9','a','b','c','d','e','f'
}


一、字节数组转化为十六进制的字符串。
用两位的十六进制数即可表示一个八位的byte数。
第一位十六进制数由byte数向右移动4位(即除于16取模)。第二位十六进制数
直接取byte数的低四位。代码如下
public static String byte2HexString(byte[] b){
  StringBuilder buff = new StringBuilder();
 for(int i = 0 ; i < b.length;i++){
    buff.append([b[i]>>>4])
        .append(hex[bi]&0xF);
  }
   return buff.toString();
}
二、十六进制的字符串表示转化为其他基本数字类型
直接用java常用类中各种基本类型的对象的parse方法
比如, Integer的parseInt(String s, int radix)方法 。
s为要解析的字符串,radix为解析的基数。radix可以任意指定。
将字符串s ="abcd"转化为int型则为:int i= Integer.parseInt(s,16);
其他基本类型与转化为int类型相同。

一个完整的代码如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用递归函数算法实现字符串与十六进制转化的C语言代码: ```c #include <stdio.h> // 将一个字节转化十六进制ASCII码数字 char byte2hex(unsigned char byte) { if (byte < 10) { return byte + '0'; } else { return byte - 10 + 'A'; } } // 将一个十六进制ASCII码数字转化为一个字节 unsigned char hex2byte(char hex) { if (hex >= '0' && hex <= '9') { return hex - '0'; } else if (hex >= 'A' && hex <= 'F') { return hex - 'A' + 10; } else if (hex >= 'a' && hex <= 'f') { return hex - 'a' + 10; } else { return 0; } } // 将str指针中长度为len的字符串转化为对应的十六进制ASCII码数字 void str2bin_recursion(char *str, int len, char *bin, int pos) { if (len == 0) { return; } // 将一个字节转化十六进制ASCII码数字 unsigned char byte = *str; char high = byte2hex(byte >> 4); char low = byte2hex(byte & 0x0F); // 将两个十六进制ASCII码数字存入bin缓存 bin[pos] = high; bin[pos + 1] = low; // 递归处理下一个字节 str2bin_recursion(str + 1, len - 1, bin, pos + 2); } // 将bin指针中长度为len的缓存转化为对应的字符串0-9A-F void bin2str_recursion(char *bin, int len, char *str, int pos) { if (len == 0) { return; } // 将两个十六进制ASCII码数字转化为一个字节 unsigned char high = hex2byte(bin[pos]); unsigned char low = hex2byte(bin[pos + 1]); unsigned char byte = (high << 4) | low; // 将一个字节存入str缓存 *str = byte; // 递归处理下一个字节 bin2str_recursion(bin + 2, len - 2, str + 1, pos); } // 将str指针中长度为len的字符串转化为对应的十六进制ASCII码数字 char* str2bin(char *str, int len) { char *bin = malloc(len * 2 + 1); // 一个字节转化为两个十六进制ASCII码数字 str2bin_recursion(str, len, bin, 0); bin[len * 2] = '\0'; // 添加字符串结尾符 return bin; } // 将bin指针中长度为len的缓存转化为对应的字符串0-9A-F char* bin2str(char *bin, int len) { char *str = malloc(len + 1); // 两个十六进制ASCII码数字转化为一个字节 bin2str_recursion(bin, len, str, 0); str[len] = '\0'; // 添加字符串结尾符 return str; } int main() { char *str = "ABCD"; int len = strlen(str); char *bin = str2bin(str, len); printf("%s\n", bin); char *str2 = bin2str(bin, len * 2); printf("%s\n", str2); free(bin); free(str2); return 0; } ``` 这个程序的输出结果为: ``` 41424344 ABCD ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值