我在Java中有一个文件
FileInputStream in = null;
try{
in = new FileInputStream("C:\\pic.bmp");
}catch{}
我想将pic.bmp转换为十六进制值的数组,以便我可以编辑并保存修改后的版本。
有没有Java类可以做到这一点?
你很幸运,我几个月前也需要做这件事。这是一个简化版本,它从命令行获取了两个参数。两个命令行参数都是文件名...第一个是输入文件,第二个是输出文件。输入文件以二进制形式读取,输出文件以ASCII十六进制形式写入。希望你可以根据自己的需求进行修改。
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(final byte b)
{
byte leftSymbol = (byte)((b >>> BITS_PER_HEX_DIGIT) & 0x0f);
byte rightSymbol = (byte)(b & 0x0f);
return (hexSymbols[leftSymbol] + hexSymbols[rightSymbol]);
}
public static String toHexFromBytes(final byte[] bytes)
{
if(bytes == null || bytes.length == 0)
{
return ("");
}
// there are 2 hex digits per byte
StringBuilder hexBuffer = new StringBuilder(bytes.length * 2);
// for each byte, convert it to hex and append it to the buffer
for(int i = 0; i < bytes.length; i++)
{
hexBuffer.append(toHexFromByte(bytes[i]));
}
return (hexBuffer.toString());
}
public static void main(final String[] args) throws IOException
{
try
{
FileInputStream fis = new FileInputStream(new File(args[0]));
BufferedWriter fos = new BufferedWriter(new FileWriter(new File(args[1])));
byte[] bytes = new byte[800];
int value = 0;
do
{
value = fis.read(bytes);
fos.write(toHexFromBytes(bytes));
}while(value != -1);
fos.flush();
fos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
String.format("%x")
代替你的 toHexFromByte
方法。 - Josef Pflegerjavax.imageio
包(这里是文档)。您可能希望使用ImageIO
创建BufferedImage
,然后从BufferedImage
对象访问图像数据(有相应的方法)。byte[] bytes = new byte[in.available()];
in.read(bytes);
hexdump
、hexedit
或者在 Vim 中直接使用:%!xxd
这样的工具不是更容易吗? - Josef Pfleger