从十六进制转换为二进制和二进制到十六进制,不使用转换,读取 txt 文件以查找 RAM 中的错误
Converting from hex to binary and binary to hex, without using conversion, reading txt file to find errors in RAM
我正在尝试创建一个 java 程序,该程序可以从计算机的 RAM 位置转换十六进制可能的错误。然后从十六进制切换到二进制,然后从二进制切换到十进制,以找到损坏的 RAM 的位置。这是我到目前为止的代码:
public class Practice {
private static String result;
private static int j;
public static void hexToBinary() throws IOException {
Scanner infile = new Scanner(new File("RAMerrors.txt"));
result = "";
String binVal; // the binary value of the Hex
while (infile.hasNextLine()) {
String line = infile.nextLine();
Scanner input = new Scanner(line);
String hex = input.next();
for (int i = 0; i < hex.length(); i++) {
char hexChar = hex.charAt(i);
switch (hexChar) {
case ('0'):
binVal = "0000";
break;
case ('1'):
binVal = "0001";
break;
case ('2'):
binVal = "0010";
break;
case ('3'):
binVal = "0011";
break;
case ('4'):
binVal = "0100";
break;
case ('5'):
binVal = "0101";
break;
case ('6'):
binVal = "0110";
break;
case ('7'):
binVal = "0111";
break;
case ('8'):
binVal = "1000";
break;
case ('9'):
binVal = "1001";
break;
case ('A'):
binVal = "1010";
break;
case ('B'):
binVal = "1011";
break;
case ('C'):
binVal = "1100";
break;
case ('D'):
binVal = "1101";
break;
case ('E'):
binVal = "1110";
break;
case ('F'):
binVal = "1111";
break;
default:
binVal = "invalid input";
break;
}
result += binVal;
}
System.out.println("Binary of " + hex + ":" + result);
}
}
public static void binaryToDecimal() {
double j=0;
for(int i=0;i<result.length();i++)
{
if(result.charAt(i)== '1')
{
j= j + Math.pow(2, result.length()-1-i);
}
}
System.out.println("Decimal value: " + j);
}
public static void main(String arg[]) throws IOException {
hexToBinary();
binaryToDecimal();
}
}
十六进制转二进制没问题。小数部分只显示一个数字(而且它不是正确的值)。不太确定要使用什么循环或如何 运行 二进制到小数部分。在此先感谢您的任何建议! txt 文件具有这些值:
ABCDEFABC
1A00D0000
7A0EDF301
3CDAEFFAD
好的,我不清楚你的问题。你只得到一个数字的原因是你从 main
调用到 hexToBinary
,用这个方法循环遍历整个文件,然后 return 到 main
。之后,您调用 binaryToDecimal
打印出 result
的值,这是它从 hexToBinary
.
获得的最后一个值
您需要做的是从文件中读取一个值,将其转换为二进制,然后转换为十进制,然后继续处理下一个值。一种方法是这样的:
将您的方法更改为 return 一个值并获取一个参数。
hexToBinary
应该是 -
public static String hexToBinary(String hex) throws IOException {
String result = "";
String binVal; // the binary value of the Hex
for (int i = 0; i < hex.length(); i++) {
char hexChar = hex.charAt(i);
switch (hexChar) {
case ('0'):
binVal = "0000";
break;
case ('1'):
binVal = "0001";
break;
case ('2'):
binVal = "0010";
break;
case ('3'):
binVal = "0011";
break;
case ('4'):
binVal = "0100";
break;
case ('5'):
binVal = "0101";
break;
case ('6'):
binVal = "0110";
break;
case ('7'):
binVal = "0111";
break;
case ('8'):
binVal = "1000";
break;
case ('9'):
binVal = "1001";
break;
case ('A'):
binVal = "1010";
break;
case ('B'):
binVal = "1011";
break;
case ('C'):
binVal = "1100";
break;
case ('D'):
binVal = "1101";
break;
case ('E'):
binVal = "1110";
break;
case ('F'):
binVal = "1111";
break;
default:
binVal = "invalid input";
break;
}
result += binVal;
}
return result;
}
binaryToDecimal
应该是-
public static Double binaryToDecimal(String result) {
double j=0;
for(int i=0;i<result.length();i++)
{
if(result.charAt(i)== '1')
{
j= j + Math.pow(2, result.length()-1-i);
}
}
return j;
}
并且 main
将读取文件,将值传递给两个方法并打印结果:
public static void main(String args[]) throws IOException {
Scanner infile = new Scanner(new File("RAMerrors.txt"));
String result;
Double decimal;
while (infile.hasNextLine()) {
String line = infile.nextLine();
Scanner input = new Scanner(line);
String hex = input.next();
result = hexToBinary(hex);
System.out.println("Binary of " + hex + ":" + result);
decimal = binaryToDecimal(result);
System.out.println("Decimal value: " + decimal);
}
输出为
Binary of ABCDEFABC:101010111100110111101111101010111100 Decimal value: 4.6118402748E10
Binary of 1A00D0000:000110100000000011010000000000000000
Decimal value: 6.980173824E9
Binary of 7A0EDF301:011110100000111011011111001100000001
Decimal value: 3.2764719873E10
Binary of 3CDAEFFAD:001111001101101011101111111110101101
Decimal value: 1.6335699885E10
希望对您有所帮助。
我正在尝试创建一个 java 程序,该程序可以从计算机的 RAM 位置转换十六进制可能的错误。然后从十六进制切换到二进制,然后从二进制切换到十进制,以找到损坏的 RAM 的位置。这是我到目前为止的代码:
public class Practice {
private static String result;
private static int j;
public static void hexToBinary() throws IOException {
Scanner infile = new Scanner(new File("RAMerrors.txt"));
result = "";
String binVal; // the binary value of the Hex
while (infile.hasNextLine()) {
String line = infile.nextLine();
Scanner input = new Scanner(line);
String hex = input.next();
for (int i = 0; i < hex.length(); i++) {
char hexChar = hex.charAt(i);
switch (hexChar) {
case ('0'):
binVal = "0000";
break;
case ('1'):
binVal = "0001";
break;
case ('2'):
binVal = "0010";
break;
case ('3'):
binVal = "0011";
break;
case ('4'):
binVal = "0100";
break;
case ('5'):
binVal = "0101";
break;
case ('6'):
binVal = "0110";
break;
case ('7'):
binVal = "0111";
break;
case ('8'):
binVal = "1000";
break;
case ('9'):
binVal = "1001";
break;
case ('A'):
binVal = "1010";
break;
case ('B'):
binVal = "1011";
break;
case ('C'):
binVal = "1100";
break;
case ('D'):
binVal = "1101";
break;
case ('E'):
binVal = "1110";
break;
case ('F'):
binVal = "1111";
break;
default:
binVal = "invalid input";
break;
}
result += binVal;
}
System.out.println("Binary of " + hex + ":" + result);
}
}
public static void binaryToDecimal() {
double j=0;
for(int i=0;i<result.length();i++)
{
if(result.charAt(i)== '1')
{
j= j + Math.pow(2, result.length()-1-i);
}
}
System.out.println("Decimal value: " + j);
}
public static void main(String arg[]) throws IOException {
hexToBinary();
binaryToDecimal();
}
}
十六进制转二进制没问题。小数部分只显示一个数字(而且它不是正确的值)。不太确定要使用什么循环或如何 运行 二进制到小数部分。在此先感谢您的任何建议! txt 文件具有这些值:
ABCDEFABC
1A00D0000
7A0EDF301
3CDAEFFAD
好的,我不清楚你的问题。你只得到一个数字的原因是你从 main
调用到 hexToBinary
,用这个方法循环遍历整个文件,然后 return 到 main
。之后,您调用 binaryToDecimal
打印出 result
的值,这是它从 hexToBinary
.
获得的最后一个值
您需要做的是从文件中读取一个值,将其转换为二进制,然后转换为十进制,然后继续处理下一个值。一种方法是这样的:
将您的方法更改为 return 一个值并获取一个参数。
hexToBinary
应该是 -
public static String hexToBinary(String hex) throws IOException {
String result = "";
String binVal; // the binary value of the Hex
for (int i = 0; i < hex.length(); i++) {
char hexChar = hex.charAt(i);
switch (hexChar) {
case ('0'):
binVal = "0000";
break;
case ('1'):
binVal = "0001";
break;
case ('2'):
binVal = "0010";
break;
case ('3'):
binVal = "0011";
break;
case ('4'):
binVal = "0100";
break;
case ('5'):
binVal = "0101";
break;
case ('6'):
binVal = "0110";
break;
case ('7'):
binVal = "0111";
break;
case ('8'):
binVal = "1000";
break;
case ('9'):
binVal = "1001";
break;
case ('A'):
binVal = "1010";
break;
case ('B'):
binVal = "1011";
break;
case ('C'):
binVal = "1100";
break;
case ('D'):
binVal = "1101";
break;
case ('E'):
binVal = "1110";
break;
case ('F'):
binVal = "1111";
break;
default:
binVal = "invalid input";
break;
}
result += binVal;
}
return result;
}
binaryToDecimal
应该是-
public static Double binaryToDecimal(String result) {
double j=0;
for(int i=0;i<result.length();i++)
{
if(result.charAt(i)== '1')
{
j= j + Math.pow(2, result.length()-1-i);
}
}
return j;
}
并且 main
将读取文件,将值传递给两个方法并打印结果:
public static void main(String args[]) throws IOException {
Scanner infile = new Scanner(new File("RAMerrors.txt"));
String result;
Double decimal;
while (infile.hasNextLine()) {
String line = infile.nextLine();
Scanner input = new Scanner(line);
String hex = input.next();
result = hexToBinary(hex);
System.out.println("Binary of " + hex + ":" + result);
decimal = binaryToDecimal(result);
System.out.println("Decimal value: " + decimal);
}
输出为
Binary of ABCDEFABC:101010111100110111101111101010111100 Decimal value: 4.6118402748E10 Binary of 1A00D0000:000110100000000011010000000000000000 Decimal value: 6.980173824E9 Binary of 7A0EDF301:011110100000111011011111001100000001 Decimal value: 3.2764719873E10 Binary of 3CDAEFFAD:001111001101101011101111111110101101 Decimal value: 1.6335699885E10
希望对您有所帮助。