为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只甜甜圈 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 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信