java - 如何在 Java 中将十六进制字符串转换为有符号 int 值?

标签 java casting hex decimal signed

在我的计算机组织课上,我们被分配了一个程序。我被困在一件事上。我的值 7FF 作为字符串,我需要将其转换为有符号整数。我可以将其转换为无符号整数。我得到的值是 2047。正确的值应该是 -1。

现在这是我所拥有的:

int x = Integer.parseInt("7FF", 16);

我尝试用短片转换它,但没有任何作用。任何帮助,将不胜感激!谢谢。

编辑:所以我的主要问题是,如何使用十六进制字符串“7FF”生成 -1 的输出?

最佳答案

要将十六进制字符串解析为 11 位有符号值,可以使用以下方法。

该算法取自Bit Twiddling Hacks作者:肖恩·埃伦·安德森。

public static int parseElevenBits(String hex) {
    return Integer.parseInt(hex, 16) << 21 >> 21;
}

测试

System.out.println(parseElevenBits("400"));
System.out.println(parseElevenBits("401"));
System.out.println(parseElevenBits("7FE"));
System.out.println(parseElevenBits("7FF"));
System.out.println(parseElevenBits("0"));
System.out.println(parseElevenBits("1"));
System.out.println(parseElevenBits("3FE"));
System.out.println(parseElevenBits("3FF"));

输出

-1024
-1023
-2
-1
0
1
1022
1023

关于java - 如何在 Java 中将十六进制字符串转换为有符号 int 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49482282/

相关文章:

php - 如何将字符串转换为 boolean 值 php

c - 十六进制语法符号

python - 从颜色名称 matplotlib 获取十六进制

java - 如何将 Java 属性序列化为 JSON

java - 直接统计重复子串的出现次数

java - SQLite 或数组列表

c# - Asp.net:在 foreach 循环中处理 null

javascript - !!(new Number(0)) == true,但是 !!(Number(0)) == false,为什么?

java - 如何在 Spring Controller 中模拟用户,并在某些内容丢失或未模拟时进行调试?

c - 从C中的十六进制地址中提取MSB和LSB