如何将十六进制数字字符串零填充为八位数字?

我有一个逻辑要求,我需要确保十六进制数字字符串以 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


一只甜甜圈
浏览 148回答 1
1回答

皈依舞

显然,您正在接收一个String,将其chars 转换为它们的 Unicode 代码值,并形成一个String包含这些代码值的十六进制表示形式的 a 。你要解决的问题是用字符向左填充结果,'0'使总长度不小于八。实际上,示例代码中与问题本身直接相关的唯一部分是int&nbsp;addhex&nbsp;=&nbsp;0;和System.out.println("\&nbsp;nkey&nbsp;in&nbsp;Hex:"&nbsp;+&nbsp;addhex&nbsp;+&nbsp;builder.toString());.&nbsp;其他一切都只是设置。然而,应该清楚的是,这种特定的尝试是行不通的,因为除了所有其他考虑之外,您需要一些东西来适应数字字符串的未填充长度。该计算完全不依赖于数字字符串的长度。由于您已经在 a 中累积了数字字符串,因此在读出结果之前对其StringBuilder应用所需的更改似乎是明智的。有几种方法可以解决这个问题,但一个非常简单的方法是一次只将一个归零,直到达到所需的长度:insert()while&nbsp;(builder.length()&nbsp;<&nbsp;8)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;builder.insert(0,&nbsp;'0');&nbsp;&nbsp;//&nbsp;Inserts&nbsp;char&nbsp;'0'&nbsp;at&nbsp;position&nbsp;0}但是,我确实怀疑您可能错误地解释了问题。执行您所要求的操作所获得的结果是模棱两可的:在大多数需要此类填充的情况下,有多个输入字符串可以产生相同的输出。因此,我倾向于猜测,真正想要的是逐字符填充与每个输入字符对应的数字,这样输入“12”就会产生结果“00310032”。这是因为 Javachar值是 16 位宽,并且它会产生可靠可逆的转换。如果那是您真正想要的,那么您应该能够采用我提出的方法来实现它(尽管在那种情况下有更简单的方法)。如果使用代码Long.toHexString(blabla);是不是把“0x00”的值改成“\0030”,这样0的输出就是30以十六进制表示的字符“0”的 Unicode 代码值为 30。您的转换方法将为输入字符串生成该值"0"。您的方法对其输入中的字符“\”没有任何特殊意义。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java