亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將十六進制數字字符串零填充為八位數字?

如何將十六進制數字字符串零填充為八位數字?

一只甜甜圈 2023-03-23 16:51:14
我有一個邏輯要求,我需要確保十六進制數字字符串以 8 位格式顯示,即使前導數字為零也是如此。例如,0x3132對應的字符串應該格式化為“0x00003132”。我試過這個:String key_ip = txt_key.getText(); int addhex = 0; char [] ch = key_ip.toCharArray (); StringBuilder builder = new StringBuilder();for (char c : ch) {     int z = (int) c;    builder.append(Integer.toHexString(z).toUpperCase()); } System.out.println("\ n (key) is:" + key_ip); System.out.println("\ nkey in Hex:" + addhex + builder.toString());,但它給了我一個錯誤。誰能解釋如何為此修復或重寫我的代碼?我想再問一件事,如果使用代碼Long.toHexString(blabla);是不是把“0x00”的值改成“\0030”,這樣0的輸出就是30
查看完整描述

1 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

顯然,您正在接收一個String,將其chars 轉換為它們的 Unicode 代碼值,并形成一個String包含這些代碼值的十六進制表示形式的 a 。你要解決的問題是用字符向左填充結果,'0'使總長度不小于八。實際上,示例代碼中與問題本身直接相關的唯一部分是

int addhex = 0;

System.out.println("\ nkey in Hex:" + addhex + builder.toString());

. 其他一切都只是設置。

然而,應該清楚的是,這種特定的嘗試是行不通的,因為除了所有其他考慮之外,您需要一些東西來適應數字字符串的未填充長度。該計算完全不依賴于數字字符串的長度。

由于您已經在 a 中累積了數字字符串,因此在讀出結果之前對其StringBuilder應用所需的更改似乎是明智的。有幾種方法可以解決這個問題,但一個非常簡單的方法是一次只將一個歸零,直到達到所需的長度:insert()

while (builder.length() < 8) {
    builder.insert(0, '0');  // Inserts char '0' at position 0}

但是,我確實懷疑您可能錯誤地解釋了問題。執行您所要求的操作所獲得的結果是模棱兩可的:在大多數需要此類填充的情況下,有多個輸入字符串可以產生相同的輸出。因此,我傾向于猜測,真正想要的是逐字符填充與每個輸入字符對應的數字,這樣輸入“12”就會產生結果“00310032”。這是因為 Javachar值是 16 位寬,并且它會產生可靠可逆的轉換。如果那是您真正想要的,那么您應該能夠采用我提出的方法來實現它(盡管在那種情況下有更簡單的方法)。


如果使用代碼

Long.toHexString(blabla);

是不是把“0x00”的值改成“\0030”,這樣0的輸出就是30

以十六進制表示的字符“0”的 Unicode 代碼值為 30。您的轉換方法將為輸入字符串生成該值"0"。您的方法對其輸入中的字符“\”沒有任何特殊意義。


查看完整回答
反對 回復 2023-03-23
  • 1 回答
  • 0 關注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號