【问题标题】:How to Convert ASCII to Hex如何将 ASCII 转换为十六进制
【发布时间】:2011-11-04 18:09:30
【问题描述】:

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

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

  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");

【问题讨论】:

    标签: java clojure


    【解决方案1】:

    十六进制、十进制和二进制整数并不是不同的东西——整数只有一种底层表示。你说你试图避免的一件事——“ASCII 字符串表示”——是唯一不同的事情。变量总是相同的,只是你打印它的方式不同。

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

    【讨论】:

    • "printf" 值得注意的是Java没有printf
    • @luiscubal:从 jdk 5 开始,它是 java.io.PrintStream 上的一个方法。
    • @Ari No dezimal 中的数字 20 与十六进制中的 14 或二进制中的 00010100 相同。您只能在某个任意基数中以文本方式表示此数字。我仍然不确定您的实际目标是什么 - 您要将字符串表示形式写入文件还是二进制文件中的数字?编辑:写这篇文章时评论消失了,哦,好吧。
    • @Nathan Hughes 我不知道。
    【解决方案2】:

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

    (.write out (read-string string-representing-a-number)) 之类的就足够了。

    【讨论】:

      【解决方案3】:

      以下是将您的三个步骤汇总到一行 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】:
        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();
        }
        

        【讨论】:

          【解决方案5】:
          //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);
          

          【讨论】:

          • 只包含代码的答案通常被认为是低质量的答案。请考虑添加对答案中代码的用途的解释
          猜你喜欢
          • 2016-09-27
          • 1970-01-01
          • 2012-12-10
          • 1970-01-01
          • 2017-08-28
          • 2017-10-13
          • 2011-11-21
          • 2011-08-24
          • 1970-01-01
          相关资源
          最近更新 更多