Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从十六进制转换为二进制,反之亦然。艰难的道路_Java_Binary_Hex - Fatal编程技术网

Java 从十六进制转换为二进制,反之亦然。艰难的道路

Java 从十六进制转换为二进制,反之亦然。艰难的道路,java,binary,hex,Java,Binary,Hex,我正在写一个代码,可以在二进制、十进制和十六进制之间进行转换。我已经算出了二进制和十进制,但当我到了十六进制时,我就搞糊涂了 如果不使用Integer.toHexString,您将如何进行此转换 我知道已经有一个代码可以在java中为我做到这一点,我的困惑是如何告诉java使用手动转换来实现这一点 我的想法是创建多个if语句,每个语句解释0是0000,或者C是1100,等等 它将遍历十六进制字符串中的每个字符,并将二进制值相加 我觉得这是我被要求做的很多代码的一种方式 除非这是唯一的方法,否则我

我正在写一个代码,可以在二进制、十进制和十六进制之间进行转换。我已经算出了二进制和十进制,但当我到了十六进制时,我就搞糊涂了

如果不使用Integer.toHexString,您将如何进行此转换

我知道已经有一个代码可以在java中为我做到这一点,我的困惑是如何告诉java使用手动转换来实现这一点

我的想法是创建多个if语句,每个语句解释0是0000,或者C是1100,等等

它将遍历十六进制字符串中的每个字符,并将二进制值相加

我觉得这是我被要求做的很多代码的一种方式

除非这是唯一的方法,否则我会开始这样做

但是,如果有一个伪代码来解释如何更有效地做到这一点,我们将不胜感激

额外信息:

int hexDigit1A=(binaryDigit8%2)*8+(binaryDigit7%2)*4+(binaryDigit6%2)*2+(binaryDigit5%2)*1;
int hexDigit2A=(binaryDigit4%2)*8+(binaryDigit3%2)*4+(binaryDigit2%2)*2+(binaryDigit1%2)*1; 
我知道这会把一个4位的二进制数转换成它合适的十进制数,这会有用吗,还是对十进制数有用呢

非常感谢你

我的想法是创建多个if语句,每个语句解释0是 0000,或C为1100,其他值依此类推

天哪,这一定是有史以来最糟糕的主意

解决这个问题的关键是理解数字的含义

比如说

十六进制中的A12C可以表示为

A*16^3+1*16^2+2*16^1+C 或 10*16^3+1*16^2+2*16^1+12

然后你可以建立一个while循环,做一些div/mod功夫来进行转换

通过这种方式,您的转换将适用于任何具有最大整数限制的数字

我的想法是创建多个if语句,每个语句解释0是 0000,或C为1100,其他值依此类推

天哪,这一定是有史以来最糟糕的主意

解决这个问题的关键是理解数字的含义

比如说

十六进制中的A12C可以表示为

A*16^3+1*16^2+2*16^1+C 或 10*16^3+1*16^2+2*16^1+12

然后你可以建立一个while循环,做一些div/mod功夫来进行转换


通过这种方式,您的转换将适用于任何具有最大整数限制的数字。

现代计算机中的所有整数都以硬件或二进制表示。十六进制是一个二进制数的表示,其中每4位由一个字符0-F表示。因此,一个整数

0100 1100

也可以十六进制表示为4C(十进制表示为76)

有两种对整数的操作可以帮助您解决这个问题。第一个是'and'函数,用java表示,带有一个与('&')。如果有“和”两个整数,则一个整数中的每个位位置与下一个整数中相应的位位置进行and运算;因此,如果将二进制数
0000 1111
设置为“and”,则结果将与原始数的最低4位相同。在我们的示例中,结果将是
0000 1100
。(我们将0000 1111称为“掩码”,并说我们正在屏蔽低4位或屏蔽高4位。)


第二个操作是移位;人们可以用>>和左右移动现代计算机中的所有整数都是用硬件和二进制表示的。十六进制是一个二进制数的表示,其中每4位由一个字符0-F表示。因此,一个整数

0100 1100

也可以十六进制表示为4C(十进制表示为76)

有两种对整数的操作可以帮助您解决这个问题。第一个是'and'函数,用java表示,带有一个与('&')。如果有“和”两个整数,则一个整数中的每个位位置与下一个整数中相应的位位置进行and运算;因此,如果将二进制数
0000 1111
设置为“and”,则结果将与原始数的最低4位相同。在我们的示例中,结果将是
0000 1100
。(我们将0000 1111称为“掩码”,并说我们正在屏蔽低4位或屏蔽高4位。)


第二个操作是移位;可以使用>>和向右或向左移动,这是通过一个简单的映射函数实现的。手工操作时,将二进制值分解为4位,对吗?然后为每个“4位”分配它自己的特定十六进制值。您的算法应该检查二进制值,查看每个“4位”,并确定要应用的正确十六进制值

这看起来像一个实验室,所以这里有一些超基本的伪代码

Binary Value
Look at last 4 bits
Map to appropriate Hexadecimal Number
Look at next 4 bits, etc etc.

这将使您对十六进制->二进制转换的操作有足够的了解。同样的想法

这是通过一个简单的映射函数实现的。手工操作时,将二进制值分解为4位,对吗?然后为每个“4位”分配它自己的特定十六进制值。您的算法应该检查二进制值,查看每个“4位”,并确定要应用的正确十六进制值

这看起来像一个实验室,所以这里有一些超基本的伪代码

Binary Value
Look at last 4 bits
Map to appropriate Hexadecimal Number
Look at next 4 bits, etc etc.

这将使您对十六进制->二进制转换的操作有足够的了解。同样的想法

我看了你的想法,这是我最了解的一个。我没有看最后4位,而是看了前四位,然后一路往下删除我不需要的东西,结果成功了。谢谢你的伪代码,它非常有帮助。我看了你的想法,这是我最了解的。我没有看最后4位,而是看了前四位,然后一路往下删除我不需要的东西,结果成功了。所以谢谢你的伪代码,它非常有帮助。