java - 为什么 String.format ("%02x ", -1) 返回 ffffffff 而不是 ff?

标签 java hex string.format

我需要将字节转换为十六进制字符串,并尝试如下: String.format("%02x", -1);

注意,这里的-1是二进制补码整数

但是我得到的返回是“ffffffff”而不是预期的“ff”?

最佳答案

因为ff不是-1。它是 255。在格式中指定 02 可能会用前导零填充一个短数字,使其达到 2 位数字,但它不会以某种方式截断数字这会给出错误的值。

如果你想获取一个数字的一​​字节值,可以使用&0xff将其截取为一字节。

int n = -1;
String.format("%02x", n&0xff);

关于java - 为什么 String.format ("%02x ", -1) 返回 ffffffff 而不是 ff?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60198806/

相关文章:

java - 我正在制作一个安全的、编译时的 String.format(...) 等价物。问题仍然存在

c# - C# 中需要 String.Format 以抛出参数不匹配的编译时错误

android - 数字格式不考虑区域设置。考虑使用 String.format 而不是 android studio

java - E(fx)clipce 与 Inno Setup 错误的 jre 文件夹名称

java - SQL CODE -104(错误)可以代表什么?

java - java正则表达式有问题

php - 如何从字符串中删除零宽度非连接器?

javascript - 黑客如何将 javascript 代码注入(inject)我的 homepage.php

java - 用于分页 SELECT sql 查询的通用查看器

将十六进制流复制到字符缓冲区中以通过网络发送