【发布时间】:2013-08-07 08:10:19
【问题描述】:
我必须将 int 转换为十六进制值。例如 int 值:
int_value = -13516;
要转换为十六进制值:
hex_value = Integer.toHexString(int_value);
我应该得到的值是:-34CC(我不知道我是否应该将其设为正数)。
问题是这样进行转换,我得到的值是:ffff cb34
我不能用这个函数来做这个转换吗?
【问题讨论】:
-
它确实实现了转换!它为您提供了值的十六进制表示,它设置了符号位,因为它是负数。 Android 使用二进制补码来表示负整数:负值表示最左边的位被设置,正值表示最左边的位未设置。见Signed number representations。我意识到这已经两年了,但是对底层机制的扎实掌握对于程序员来说是一件很有价值的事情。 :)
-
@LorneLaliberte 如果(例如)您有 C 背景,printf 的 %X 格式说明符会给您提供的任何数字的无符号十六进制表示,无论是否有符号,这仍然是出乎意料的。更糟糕的是,Java 甚至没有 无符号整数类型,所以你甚至无法修复它!
-
@Micheal 在这种情况下 C 和 Java 没有区别,实际上 java 也返回一个无符号值。无论哪种方式,位(以及这些位的十六进制表示)都是相同的。 “有符号”和“无符号”只是对位的不同解释。我认为您可能想刷新您对 C 的
sprintf函数的记忆,因为%X说明符在两种语言中的工作方式相同。