簡體   English   中英

如何將 ASCII 轉換為十六進制

[英]How to Convert ASCII to Hex

如何ASCII 值轉換為十六進制和二進制值(不是它們的 ASCII 字符串表示)? 例如,如何將十進制值 26 轉換為 0x1A?

到目前為止,我已經嘗試使用以下步驟進行轉換(實際代碼見下文):

  1. 將值轉換為字節
  2. 將每個字節轉換為 int
  3. 通過String.toString(intValue, radix)將每個 int 轉換為十六進制

注意:我確實問了一個有關將十六進制值寫入文件的相關問題

Clojure 代碼:

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

爪哇代碼:

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 字符串表示”——是唯一不同的東西。 變量總是相同的,只是你打印它的方式不同。

現在,我不是 100% 清楚你想要做什么。 但鑒於上述情況,路徑很清楚:如果您有一個String ,則通過解析將其轉換為int (即,使用Integer.parseInt() )。 然后,如果您希望以某種格式打印它,則可以很容易地將該int打印為您想要的任何內容,例如printf格式說明符。

如果您確實想要十六進制字符串,那么(format "%02X" n)比您在第一次嘗試時跳過的箍要簡單得多。 如果不這樣做,則只需將整數值直接寫入文件,而無需嘗試將它們轉換為字符串。

(.write out (read-string string-representing-a-number))這樣的東西就足夠了。

以下是將您的三個步驟匯總到一行 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
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();
}
//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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM