请解释java中十六进制到十进制的代码行



我对编码非常陌生,并且收到了这个将十六进制数转换为十进制的java程序我很难理解的代码行是这个

val = 16*val + d;

我希望有人能在等式右侧向我解释val的值来自哪里,提前感谢

/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
*/
package javaapplication;
/**
*
* @author Rado
*/
public class JavaApplication {
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
// TODO code application logic here
String digits = "0123456789ABCDEF";  
String myhex="ABC";
int val = 0;  
for (int i = 0; i < myhex.length(); i++)  
{  
char c = myhex.charAt(i);  
int d = digits.indexOf(c);  


val = 16*val + d;  
}  
System.out.println(val);
}
}

您似乎没有理解这背后的逻辑。

但让我们假设你做到了,让我们试着分解代码:

第一件事是您正在使用的字符串。我们有";myhex";字符串,它是我们要转换为十进制格式的值的十六进制表示。

String myhex="ABC";

我们有另一个字符串";数字";。我们在.indexOf(字符(方法的帮助下使用该字符串进行计算。它是Strings的内置方法,用于查找我们要查找的字符的索引。它返回我们在括号中指定的字符索引。(例如,在"数字"字符串中,我们有一个"A"字符,它在该字符串中是第十个,但如果"A"在开头,它将返回int 0。

String digits = "0123456789ABCDEF"; 

不要忘记,我们已经声明了一个int"val";循环之前。因此,我们不会丢失循环部分中的值。

int val = 0;  

然后我们有一个for循环;myhex"s的长度作为循环的边界。我们通过";myhex";通过用.charAt(int index,在循环开始时和第一次执行时为0(声明一个新字符,我们将使用"a"作为第一个"c"字符。

char c = myhex.charAt(i);

之后,我们通过分配d 来查看它代表的值

int d = digits.indexOf(c);  

剩下的只是寻找十进制值(以十为基数(->逻辑

如果你在理解某件事上有问题。要做的第一件事是弄清楚您在逻辑或代码方面是否有问题。

逐位

val = 16*val + d;

并打印循环后的十进制值

System.out.println(val);

只是为了回答您关于方程右侧变量"val"的问题。

val = (16 * val) * d;

通过:val=(以前的"val"乘以16(加上"d"的值,将"val"重新声明为新值

这是在每次迭代中完成的,在本例中为"myhex"的长度3,对我的十六进制中的每个字符重复三次,并检查它是否存在于数字字符串中。

以下是对代码的修改,其中包含注释,可以帮助您了解每次迭代中代码的执行情况。

public class JavaApplication {
public static void main(String[] args)  {
String digits = "0123456789ABCDEF";
String myhex="ABC";
int val = 0;

/* Iterate the length of the string myhex, in this case, 3 iterations */
for (int i = 0; i < myhex.length(); i++)    {
/* c is equals to the character at index 'i' of myhex */
char c = myhex.charAt(i);

/* let d equal the index of the first occurence of 'c' in digits */
int d = digits.indexOf(c);

/* reassign val to (val * 16) + d */
val = 16 * val + d;
System.out.println("Value of 'val' at iteration " + i + ":t" + val); // print out val for every iteration of 'i'
}

System.out.println("final value of 'val': " + val); // final value of val after all iterations
}
}

最新更新