3

多くのバイトを含む 16 進ファイルがあります。たとえば、特定のバイトに従ってこれらのバイトを分割する必要があります。

f0 1 5 0 0 0 0 0 0 b7 7a 7a e5 db 40 2 0 c0 0 0 9 18 16 0 e3 1 40 0 0 3f 20 f0 1 5 0 0 0 0 0 0 41 bc 7a e5 db 40 2 0 c0 1 0 9 18 16 0 e3 1 40 0 0 3f 20 f0 1 5 0 0 0 0 0 0 53 3f 7b e5 db 40 2 0 c0 3 0 9 2 19 24 3d 0 22 68 1 db 9 

「f0」が表示されるたびに、バイトを分割して保存し、次のようにします

f0 1 5 0 0 0 0 0 0 b7 7a 7a e5 db 40 2 0 c0 0 0 9 18 16 0 e3 1 40 0 0 3f 20
f0 1 5 0 0 0 0 0 0 41 bc 7a e5 db 40 2 0 c0 1 0 9 18 16 0 e3 1 40 0 0 3f 20
f0 1 5 0 0 0 0 0 0 53 3f 7b e5 db 40 2 0 c0 3 0 9 2 19 24 3d 0 22 68 1 db 9 

これらのそれぞれについて、文字列操作を行う文字の配列として扱いたいと思います。

これらのパターンをどのように保存し、操作を行う文字としてどのように扱うことができるでしょうか。

これが私がやろうとしたことです

    String filename = "C:\\tm09888.123";
    FileInputStream in = null;
    int readHexFile = 0; 
    char hexToChar = ' ';
    String[] bytes = new String[10];

    try
    {            
        in = new FileInputStream(filename); 

        while((readHexFile = in.read()) != -1)
        {       
            if (Integer.toHexString(readHexFile).equals("f0"))
            {
                System.out.print("\n\n\n");
            }
            System.out.print(Integer.toHexString(readHexFile) + " ");
        }
    }
    catch (IOException ex)
    {
        Logger.getLogger(NARSSTest.class.getName()).log(Level.SEVERE, null, ex);
    }  

}  

パターンの分割に成功しましたが、どのようにそれを保存し、それぞれに対して文字列操作を行うことができますか?

4

3 に答える 3

2

ファイルが一連の16進数として印刷したいバイナリの場合は、次のことができます

BufferedInputStream in = new BufferedInputStream(new FileInputStream());
try {
    boolean first = true;
    for(int b; (b = in.read()) >= 0;) {
        if (b == 0xF0 && !first)
            System.out.println();
        first = false;
        System.out.printf("%x ", b);
    }
} finally {
    in.close();
    System.out.println();
}

ファイルがテキストとして16進数の場合は、次のことができます

String text = FileUtils.readFileAsString(file, "iso-8859-1");
text = text.replaceAll(" f0", "\nf0");
FileUtils.writeStringToFile(file2, text);

または、これを行に分割するには

String text = FileUtils.readFileAsString(file, "iso-8859-1");
BufferedReader br = new BufferedReader(new StringReader(text.replaceAll(" f0", "\nf0")));
for(String line; (line = br.readLine()) != null;) {
   // process one line
}

FileUtilsを使用するか、独自のメソッドを使用して同様に行います。

于 2012-12-05T15:20:13.577 に答える
0

hexファイルを文字列に変換して文字列操作をしてみませんか?

FileReader を使用して、ファイルを 1 つの大きな文字列としてメモリに読み込みます (ファイルのサイズが妥当な場合)。基礎となる InputStringReader では、デフォルトの UTF-16 を使用しないように、US-ASCII を指定する必要があります。次に、ASCII の f0 値に対応する文字 (アイスランド語 ð) で string.split() を実行します。

char f0 = 'ð';

BufferedReader reader = new BufferedReader(new FileReader(new InputStreamReader(new FileInputStream(file), "US-ASCII")));

//read reader into string, trivial...

String[] split = readString.split(f0);
for(String s : split){
    s = 'ð' + s;
    //do your work on the string here
}
于 2012-12-05T15:22:21.600 に答える
0
List<String> list = new ArrayList<>();
StringBuilder strb = new StringBuilder();
while((readHexFile = in.read()) != -1) {
    String str = Integer.toHexString(readHexFile);
    if (str.equals("f0")) {
         String string = strb.toString();
         if (!string.isEmpty()) {
              list.add(new String("f0" + string)); // here
         }
         strb = new StringBuilder();
    } else {
         strb.append(str);
    }
}
String string = strb.toString();
if (!string.isEmpty()) {
    list.add(new String("f0" + string)); // here
}
// now you have all the strings in the list.
于 2012-12-05T15:21:09.260 に答える