0

我需要将符号转换为位,以便每 2 个符号 = 1 字节 = 8 位。例如,如果用户输入是RR那么应该有00001100作为结果。(只是一个例子)

4

3 回答 3

2

我无法理解你。为什么RR应该是00001100?在十六进制中,1100 代表字符“C”。

于 2012-11-16T12:40:54.337 回答
0

所以,如果我理解你的问题,那么有两种选择可以解决:简单或困难的方式。

简单的:

  • 首先,您需要知道要使用的文字是否为十六进制值。
  • 您可以使用键 0-9 | 创建一个表示 ASCII 表的排序映射。AH 和值代表你的二进制数。

例子:

SortedMap<Character, String>
lo_binary = new TreeMap<Character, String>();
lo_binary.put('0', "0000");
lo_binary.put('1', "0001");
lo_binary.put('2', "0010");
lo_binary.put('3', "0011");
lo_binary.put('4', "0100");
lo_binary.put('5', "0101");
lo_binary.put('6', "0110");
lo_binary.put('7', "0111");
lo_binary.put('8', "1000");
lo_binary.put('9', "1001");
lo_binary.put('A', "1010");
lo_binary.put('B', "1011");
lo_binary.put('C', "1100");
lo_binary.put('D', "1101");
lo_binary.put('E', "1110");
lo_binary.put('F', "1111");
  • 阅读这两个符号并尝试将您的二进制代码查找到 Sorted Map 中。
  • 将结果存储到字符串中

    字符串 ls_symbols = "AA"; 字符串 ls_result = " ";

    for (int ln=0; ln < ls_symbols.lenght(); ln++) { ls_result += lo_binary.get(ls_symbols.charAt(ln)); }

    System.out.println(ls_result); // AA -> 10101010

难的:

  • 首先,您需要知道要使用的文字是否为十六进制值。
  • 将具有十六进制字符的文字转换为 byte[]。
  • 将 byte[] 转换为 boolean[]
  • 结果为真 = 1 和假 = 0

例子:

// 你有文字 A。这个文字以二进制表示值 1010。你有 // 使用运算符 >>> 和 & 将二进制值更改为布尔值

1010
boolean = (1010 & 1000) == 1000 // (1000 = represents 0x80)
boolean = true (1);

1010 >>> 0100
boolean = (0100 & 1000) == 0000
boolean = false (0);

0100 >>> 1000
boolean = (1000 & 1000) == 1000
boolean = true (1);

1000 >>> 0000
boolean = (0000 & 1000) == 0000
boolean = false (0);
于 2012-11-16T15:49:28.877 回答
0

您的问题令人困惑,因为您谈论的是十六进制然后显示二进制数。无论如何,也许这会有所帮助......这会将输入转换为十六进制。也许你可以用它来准确地计算出你需要的东西(这对我来说不是那么清楚)。

import java.math.BigInteger;
public class MyTest {

    public static void main(String[] args) {

        String input = "RR";       
        System.out.println(toHex(input));     

    }   

    public static String toHex(String arg) {
        return String.format("%x", new BigInteger(1, arg.getBytes()));
    }    
}
于 2012-11-17T12:33:14.117 回答