java二进制,字节数组,字符,十六进制,BCD编码转换

  1. // 整数到字节数组转换
  2.  public static byte[] int2bytes(int n) {
  3.   byte[] ab = new byte[4];
  4.   ab[0] = (byte) (0xff & n);
  5.   ab[1] = (byte) ((0xff00 & n) >> 8);
  6.   ab[2] = (byte) ((0xff0000 & n) >> 16);
  7.   ab[3] = (byte) ((0xff000000 & n) >> 24);
  8.   return ab;
  9.  }
  10.  // 字节数组到整数的转换
  11.  public static int bytes2int(byte b[]) {
  12.   int s = 0;
  13.   s = ((((b[0] & 0xff) << 8 | (b[1] & 0xff)) << 8) | (b[2] & 0xff)) << 8
  14.     | (b[3] & 0xff);
  15.   return s;
  16.  }
  17.  // 字节转换到字符
  18.  public static char byte2char(byte b) {
  19.   return (char) b;
  20.  }
  21.  private final static byte[] hex = "0123456789ABCDEF".getBytes();
  22.  private static int parse(char c) {
  23.   if (c >= 'a')
  24.    return (c - 'a' + 10) & 0x0f;
  25.   if (c >= 'A')
  26.    return (c - 'A' + 10) & 0x0f;
  27.   return (c - '0') & 0x0f;
  28.  }
  29.  // 从字节数组到十六进制字符串转换
  30.  public static String Bytes2HexString(byte[] b) {
  31.   byte[] buff = new byte[2 * b.length];
  32.   for (int i = 0; i < b.length; i++) {
  33.    buff[2 * i] = hex[(b[i] >> 4) & 0x0f];
  34.    buff[2 * i + 1] = hex[b[i] & 0x0f];
  35.   }
  36.   return new String(buff);
  37.  }
  38.  // 从十六进制字符串到字节数组转换
  39.  public static byte[] HexString2Bytes(String hexstr) {
  40.   byte[] b = new byte[hexstr.length() / 2];
  41.   int j = 0;
  42.   for (int i = 0; i < b.length; i++) {
  43.    char c0 = hexstr.charAt(j++);
  44.    char c1 = hexstr.charAt(j++);
  45.    b[i] = (byte) ((parse(c0) << 4) | parse(c1));
  46.   }
  47.   return b;
  48.  } 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个很有趣的问题!下面是用MASM和LINK编写的汇编语言程序,实现输入一个十进制数并输出对应的二进制数、十六进制数和BCD码的过程: ```assembly .model small .stack 100h .data decimal db ? binary db 9 dup('$') hexa db 3 dup('$') bcd db 6 dup('$') newline db 0Dh, 0Ah, '$' .code main proc mov ax, @data mov ds, ax ; 读取输入的字符 call readchar ; 将十进制数转化为二进制数 mov al, decimal call convert_2 mov binary, al ; 将十进制数转化为十六进制数 mov al, decimal call convert_16 mov hexa, al ; 将十进制数转化为BCD码 mov al, decimal call convert_BCD mov bcd, al ; 输出结果 mov ah, 09h mov dx, offset binary int 21h mov dx, offset newline int 21h mov dx, offset hexa int 21h mov dx, offset newline int 21h mov dx, offset bcd int 21h mov ah, 4Ch int 21h main endp ; 子程序:读取输入的字符 readchar proc mov ah, 01h int 21h sub al, 30h ; 将ASCII码转化为十进制数 mov decimal, al ret readchar endp ; 子程序:将十进制数转化为二进制数 convert_2 proc mov bl, 2 ; 除数为2 xor bh, bh mov cl, 7 ; 循环7次,处理8位二进制数 mov si, 0 ; 存储结果的偏移地址 convert_2_loop: mov ah, 0 ; 清空高位字节 div bl ; 除法运算 add ah, 30h ; 结果转化为ASCII码 mov [binary+si], ah ; 存储结果 inc si loop convert_2_loop ret convert_2 endp ; 子程序:将十进制数转化为十六进制数 convert_16 proc mov bl, 16 ; 除数为16 xor bh, bh mov cl, 2 ; 循环2次,处理两位十六进制数 mov si, 0 ; 存储结果的偏移地址 convert_16_loop: mov ah, 0 ; 清空高位字节 div bl ; 除法运算 cmp ah, 9 ; 判断余数是否大于9 jbe convert_16_digit ; 如果余数小于等于9,直接转化为ASCII码 add ah, 07h ; 如果余数大于9,转化为字母的ASCII码 convert_16_digit: add ah, 30h ; 结果转化为ASCII码 mov [hexa+si], ah ; 存储结果 inc si loop convert_16_loop ret convert_16 endp ; 子程序:将十进制数转化为BCD码 convert_BCD proc xor ah, ah ; 清空高位字节 xor si, si ; 初始化偏移地址 convert_BCD_loop: mov al, decimal ; 将十进制数复制到al aam ; 将al中的十位和个位分别存放在ah和al中 add ah, 30h ; 十位转化为ASCII码 mov [bcd+si], ah ; 存储十位 add al, 30h ; 个位转化为ASCII码 mov [bcd+si+1], al ; 存储个位 add si, 2 ; 偏移地址增加2个字节 cmp ah, 0 ; 判断十位是否为0 jne convert_BCD_loop ret convert_BCD endp end main ``` 这个程序使用DOSbox来运行,可以输入一个十进制数,然后输出对应的二进制数、十六进制数和BCD码。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值