簡體   English   中英

以十六進制形式閱讀Java

[英]Read Java in as Hex

我已經嘗試解決此問題,但我不斷提出無濟於事的方法,我確信這很容易(當您當然知道的時候;))

我想做的是使用如下所示的字節流讀取文件:

while((read = in.read()) != -1){

       //code removed to save space

       Integer.toHexString(read);
System.out.println(read);

}

當它在屏幕上打印十六進制時,它將打印出很好的數字,例如31 13 12 0

但是當涉及到應為01 31的十六進制代碼時,它將打印0131。我想將其讀入一個變量,就像您在十六進制編輯器中看到的那樣,即00 11 21 31沒有單個數字,因為我需要掃描整個文件,尋找我知道該怎么做的模式://

簡而言之,我需要一個可變參數來包含兩個十六進制字符,即int temp = 01而不是int temp = 0,我希望一切都有意義,因為凌晨3點,我有點困惑!

如果有人知道該怎么做,我將非常感激,ps感謝您在此站點之前提供的幫助,這為我節省了很多研究工作,並學到了很多東西!

非常感謝。

此方法:

public static void printHexStream(final InputStream inputStream, final int numberOfColumns) throws IOException{
    long streamPtr=0;
    while (inputStream.available() > 0) { 
        final long col = streamPtr++ % numberOfColumns;
        System.out.printf("%02x ",inputStream.read());
        if (col == (numberOfColumns-1)) {
            System.out.printf("\n");
        }
    }
}

將輸出如下內容:

40 32 38 00 5f 57 69 64 65 43 
68 61 72 54 6f 4d 75 6c 74 69 
42 79 74 65 40 33 32 00 5f 5f 
69 6d 70 5f 5f 44 65 6c 65 74 
65 46 69 6c 65 41 40 34 00 5f 
53 65 74 46 69 6c 65 50 6f 69 
6e 74 65 72 40 31 36 00 5f 5f 
69 6d 70 5f 5f 47 65 74 54 65 
6d 70 50 61 74 68 41 40 38 00 

是您要找的東西嗎?

import org.apache.commons.io.IOUtils;
import org.apache.commons.codec.binary.Hex;

InputStream is = new FileInputStream(new File("c:/file.txt"));
String hexString = Hex.encodeHexString(IOUtils.toByteArray(is));

在Java 7中,您可以直接從文件讀取字節數組,如下所示:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;

Path path = Paths.get("path/to/file");
byte[] data = Files.readAllBytes(path)     

我認為您正在尋找的是格式化程序。 嘗試:

Formatter formatter = new Formatter();
formatter.format("%02x", your_int);
System.out.println(formatter.toString());

這就是您想要的嗎? 您的問題不是很清楚(我認為您可能從摘要中刪除了太多代碼)。

大家好,一個人發帖,謝謝您的回復,但是我堅決地做到了:

                        hexIn = in.read();
                        s = Integer.toHexString(hexIn);
                        if(s.length() < 2){
                            s = "0" + Integer.toHexString(hexIn);
                        }

只是以為我以后會以其他人的方式發布,所以非常感謝您的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM