[英]How to Convert ASCII to Hex
如何將ASCII 值轉換為十六進制和二進制值(不是它們的 ASCII 字符串表示)? 例如,如何將十進制值 26 轉換為 0x1A?
到目前為止,我已經嘗試使用以下步驟進行轉換(實際代碼見下文):
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))))
或者您可以使用“線程最后”宏使其看起來更像您的步驟
(->> (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.