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

时间:2019-07-12 14:25:11

标签: java hex

我有一个逻辑要求,即使前导数字为零,我也需要确保以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 个答案:

答案 0 :(得分:0)

很明显,您收到一个String,将其char转换为其Unicode代码值,并形成一个String,其中包含这些代码值的十六进制表示形式。您要解决的问题是用'0'个字符左键填充结果,以使总长度不少于8个。实际上,示例代码中与问题本身直接相关的唯一部分是

int addhex = 0; 

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

。其他一切都只是设置。

但是,应该明确的是,这种特殊的尝试是行不通的,因为除了所有其他注意事项之外,您还需要一些能够适应数字字符串未填充长度的东西。该计算完全不依赖于数字字符串的长度。

由于您已经在StringBuilder中累积了数字字符串,因此在读出结果之前对它应用所需的更改 似乎是明智的。您可以采用多种方法来实现,但是一种非常简单的方法是一次insert()一次将其置零,直到达到所需的长度:

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

但是,我确实怀疑您可能误解了该问题。从您的要求中获得的结果是模棱两可的:在大多数情况下,需要这种填充的情况下,有多个输入字符串可能会产生相同的输出。因此,我倾向于猜测实际需要的是在每个字符的基础上填充与每个输入字符相对应的数字,以便输入“ 12”将产生结果“ 00310032” 。 Java char值是16位宽的事实会激发这种情况,并且它将产生可靠可逆的转换。如果那是您真正想要的,那么您应该能够采用我介绍的方法来实现它(尽管在这种情况下,更简单的方法)。


  

如果使用代码

Long.toHexString(blabla);
     

将值“ 0x00”更改为“ \ 0030”是否正确,以便输出   0是30

以十六进制表示的字符“ 0”的Unicode代码值为30。您的转换方法将为输入字符串"0"产生该代码。您的方法对输入中的字符'\'没有任何特殊意义。