如何将ASCII转换为十六进制

问题描述:

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

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

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

注:我曾问一个相关的问题有关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"); 

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

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

+0

的 “printf” 这是值得注意的是,Java没有的printf – luiscubal

+5

@luiscubal:因为JDK 5这样做,这是对java.io.PrintStream中的方法。 –

+0

@Ari在dezimal IS中的数字20与十六进制中的14相同或二进制中的00010100相同。你只能在一些任意的基础上用文本表示这个数字。我仍然不确定你的实际目标是什么 - 你想把字符串表示写入文件还是二进制文件中的数字?编辑:写评论时消失了,哦,哦。 – Voo

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

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

(.write out (read-string string-representing-a-number))应该就足够了。

这里有你的三个步骤,卷成的Clojure的一行:

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

或者您可以使其看起来更像您的步骤,使用“最后一个线程”宏观

(->> (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