9


2

Javaでファイルがあります

FileInputStream in = null; {in = new FileInputStream( "C:\\ pic.bmp");を試してください。 }キャッチ{}

_pic.bmp_を16進値の配列に変換したいので、編集して修正版として保存することができます。

これを行うためのJavaクラスはありますか?

4 Answer


19


あなたは運がいいです 私は数ヶ月前にこれをしなければなりませんでした。 これは、コマンドラインから2つのパラメータを受け取る、控えめなバージョンです。 両方のコマンドラインパラメータはファイル名です。最初のものは入力ファイルで、2番目のものは出力ファイルです。 入力ファイルは2進数で読み込まれ、出力ファイルはASCII 16進数として書き込まれます。 うまくいけばあなたはちょうどあなたのニーズにこれを適応させることができる。

import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException;

public class BinToHex {private final static String [] hexSymbols = {"0"、 "1"、 "2"、 "3"、 "4"、 "5"、 "6"、 "7"、 "8"、 " 9 "、" a "、" b "、" c "、" d "、" e "、" f "}。

public final static int BITS_PER_HEX_DIGIT = 4;

public static String toHexFromByte(最後のバイトb){byte leftSymbol =(byte)((b >>> BITS_PER_HEX_DIGIT)

return(hexSymbols [leftSymbol] hexSymbols [rightSymbol]); }

public static String toHexFromBytes(final byte [] bytes){if(bytes == null || bytes.length == 0){return( ""); }

// 1バイトあたり2桁の16進数StringBuilder hexBuffer = new StringBuilder(bytes.length * 2);

//各バイトについて、それを16進数に変換し、それを(int i = 0; i <bytes.length; i)のバッファに追加する}

return(hexBuffer.toString()); }

public static void main(final String [] args)IOExceptionをスローします。{FileInputStream fis = new FileInputStream(new File(args [0]));} BufferedWriter fos = new BufferedWriter(新しいFileWriter(新しいファイル(args [1])));

byte [] bytes =新しいバイト[800]。 int値= 0。 do {value = fis.read(bytes);} fos.write(toHexFromBytes(bytes));

while(value!= -1);

fos.flush(); fos.close(); catch(例外e){e.printStackTrace();} }}}


3


Javaには、広範囲にわたる画像の読み書きおよび編集用のライブラリがあります。 javax.imageio`パッケージを見てください(これが ドキュメントです)。 おそらく `ImageIO`を使って BufferedImage`を作成してから `BufferedImage`オブジェクトから画像データにアクセスしたいでしょう(そのためのメソッドがあります)。

(画像だけではなく)あらゆる種類のバイナリデータに対して一般的な答えが必要な場合は、ファイルの内容をバイト配列に読み込む必要があると思います。 このようなもの:

byte [] bytes =新しいバイト[in.available()]; in.read(バイト)


1


Google検索で「java hexidecimal encoding」と入力すると、最初の結果はhttp://commons.apache.org/codec/api-release/org/apache/commons/codec/binary/Hex.htmlです。あなたの質問の「pic.bmpを16進数値の配列に変換したい」という部分に答えるために使用してください。

ただし、「編集して修正版として保存できる」という点で、それがどのように役立つかはわかりません。 おそらく16進エディタを使うべきです。 例えば。 ghex2


0


自分でバイトをいじってみたい場合は、FileInputStreamからFileChannelを取得し、次にByteBufferを割り当ててから、その中にすべてのコンテンツを読み込みます。 ByteBufferには、2つの異なるバイト順で、より大きなバイトのチャンクを処理するためのメソッドもあります。