Java:文件到十六进制?

标签 java hex

我有一个 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();
        }
    }
}

关于Java:文件到十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1314568/

相关文章:

java - 在Java中的多个面板上画线

java - 为什么我可以访问b的值,即使它在子类中设置为私有(private)?

java - 如何在java中将pdf十六进制字符串(由postgres生成)转换为字节数组?

vb6 - 如何用十六进制文字/符号正确表示 Long 值 `&HFFFF`?

c# - 将 unicode 字符的十六进制序列解码为字符串的最佳方法

java - equals()方法未从文件中检测到单词

java - servlet 的 URL 模式如何对应 Spring MVC 的映射?

java - 错误信息找不到符号?

vim - 为什么在 Vim 中查看 hex 与 hexdump 结果不同?

java - 在java中的十六进制字符串中应用2的补码