我试图从一个应该是二进制数的文件中读取一组long,但是,如果它们从0开始,那么开头的0将被删除(即0101变为101)。如何解决这个问题,以便正确读取它们,以便不删除0?这是我从文件中读取的代码:
public static ArrayList<Long> readInputFile() throws IOException {
ArrayList<Long> inputList = new ArrayList<>();
Long readNew;
final String INPUT_FILE_NAME = "testFile9.dat";
try (FileInputStream fis = new FileInputStream(INPUT_FILE_NAME)) {
Scanner inputFile = new Scanner(fis);
while (inputFile.hasNext()) {
try {
readNew = inputFile.nextLong();
inputList.add(readNew);
} catch (NoSuchElementException nsee) {
throw new NoSuchElementException("[NSE ERROR]: No Long Found in Input File " + nsee);
} //end Time of Arrival try-catch
}
} catch (FileNotFoundException fnf) {
throw new FileNotFoundException("[FNF ERROR]: Input File Not Found " + fnf);
}
return inputList;
} //End readInputFile
对于测试,我试图读取值0101 1011 0100 1100;然后在输出时变为101,1011,100和1100.
答案 0 :(得分:0)
您可以将其作为String读取,然后将其解析为long:
readNew = Long.parseLong(inputFile.next(), 2);
inputList.add(readNew);
它总是可以转换回二进制显示。
您也可以将它们作为字符串读取并将它们存储为字符串,以保留所有内容。
答案 1 :(得分:0)
您将数据从十进制转换为二进制,然后从二进制转换为十进制。第二步应该指定所需的位数。领先的十进制零没有神奇地保留在Long.
里面。它们不可能。二进制值不具有十进制数字。它们有二进制数字。
答案 2 :(得分:0)
您可以使用Long
的toBinaryString()方法,它将返回long参数的字符串表示形式作为基数2中的无符号整数。
要使用此方法,请尝试将其放入while循环中:
Long.toBinaryString(readNew);
然后在那时你可以放一个println语句(在while循环中)来查看更改:
System.out.println(readNew)