如何将ASCII转换为十六进制

时间:2011-11-04 18:09:30

标签: java clojure

我如何 ASCII值转换为十六进制和二进制值(而不是ASCII中的字符串表示形式)?例如,如何将十进制值26转换为0x1A?

到目前为止,我已尝试使用以下步骤进行转换(请参阅下面的实际代码):

  1. 将值转换为字节
  2. 将每个字节转换为int
  3. 通过String.toString(intValue, radix)
  4. 将每个int转换为十六进制

    注意:我确实询问了有关writing hex values to a file.

    的相关问题

    Clojure代码:

    (apply str
      (for [byte (.getBytes value)]
        (.replace (format "%2s" (Integer/toString (.intValue byte) 16)) " " "0")))))
    

    Java代码:

    Byte[] bytes = "26".getBytes();
    for (Byte data : bytes) {
        System.out.print(String.format("%2s", Integer.toString(data.intValue(), 16)).replace(" ", "0"));
    }
    System.out.print("\n");
    

5 个答案:

答案 0 :(得分:8)

十六进制,十进制和二进制整数不是不同的东西 - 只有一个整数的底层表示。你说你要避免的一件事 - “ASCII字符串表示” - 是唯一不同的东西。变量总是一样的,它只是你打印它的方式不同。

现在,我并不是100%清楚你要做什么。但鉴于上述情况,路径很明确:如果您有String,请通过解析将其转换为int(即使用Integer.parseInt())。然后,如果您希望以某种格式打印,则可以轻松地将int打印为您想要的任何内容,例如,printf格式说明符。

答案 1 :(得分:3)

如果你真的想要十六进制字符串,那么(format "%02X" n)比你在第一次尝试时跳过的箍要简单得多。如果不这样做,那么只需将整数值直接写入文件,而不必尝试将它们转换为字符串。

(.write out (read-string string-representing-a-number))这样的东西就足够了。

答案 2 :(得分:1)

static String decimalToHex(String decimal, int minLength) {
  Long n = Long.parseLong(decimal, 10);
  // Long.toHexString formats assuming n is unsigned.
  String hex = Long.toHexString(Math.abs(n), 16);
  StringBuilder sb = new StringBuilder(minLength);
  if (n < 0) { sb.append('-'); }
  int padding = minLength - hex.length - sb.length();
  while (--padding >= 0) { sb.append('0'); }
  return sb.append(hex).toString();
}

答案 3 :(得分:1)

以下三个步骤汇总成一行clojure:

(apply str (map #(format "0x%02X " %) (.getBytes (str 42))))
  • 转换为字节(.getBytes(str 42))
  • 没有实际需要第2步
  • 将每个字节转换为以十六进制表示的字符串

或者你可以让它看起来更像你的“螺纹最后”宏的步骤

(->> (str 42)                    ; start with your value
     (.getBytes)                 ; put it in an array of bytes
     (map #(format "0x%02X " %)) ; make hex string representation
     (apply str))                ; optionally wrap it up in a string

答案 4 :(得分:0)

//get Unicode for char
char theChar = 'a';
//use this to go from i`enter code here`nt to Unicode or HEX or ASCII
int theValue = 26; 
String hex = Integer.toHexString(theValue);
while (hex.length() < 4) {
    hex = "0" + hex;
    }
String unicode = "\\u" + (hex);
System.out.println(hex);