二进制文件转Hex

对于需要将二进制数据写入固件的场景(例如mp3文件), 需要将二进制文件表示为byte数组

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class RawConverter {
public static final int LINE_LIMIT = 20; private final String path;
private final int width;
private final boolean littleEnd; public RawConverter(String path, int width, boolean littleEnd) {
this.path = path;
this.width = width;
this.littleEnd = littleEnd;
} public static byte[] readBytes(File file)
{
try (FileInputStream fl = new FileInputStream(file)) {
byte[] arr = new byte[(int)file.length()];
fl.read(arr);
return arr;
} catch (IOException e) {
e.printStackTrace();
return null;
}
} public String convert() {
File file = new File(this.path);
if (file.exists()) {
byte[] bytes = readBytes(file);
StringBuilder sb = new StringBuilder(); byte[][] units = new byte[bytes.length/width][width];
for (int i = 0; i < bytes.length; i++) {
int pos = i / width;
int shift = i % width;
if (littleEnd) {
units[pos][width - 1 - shift] = bytes[i];
} else {
units[pos][shift] = bytes[i];
}
}
int count = 0;
for (int i = 0; i < units.length; i++) {
sb.append("0x");
for (int j = 0; j < width; j++) {
sb.append(String.format("%02x", units[i][j]));
}
if (i < units.length - 1) {
sb.append(", ");
}
count++;
if (count % LINE_LIMIT == 0) {
sb.append("\n");
count = 0;
}
} return String.format("Samples: %d\n\n%s\n",
bytes.length / width,
sb);
}
return null;
} public static void main(String[] args) {
String path = "/home/user/Song-4-clip4.mp3";
String output = new RawConverter(path, 1, true).convert();
System.out.println(output);
}
}

Wav文件转Hex

import org.apache.commons.io.IOUtils;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths; public class Converter {
public static final int LINE_LIMIT = 20; private final String path;
private final int width; public Converter(String path, int width) {
this.path = path;
this.width = width;
} public String convert() {
try {
final Path path = Paths.get(this.path);
final URL url = path.toUri().toURL();
final AudioInputStream ais = AudioSystem.getAudioInputStream(url);
final AudioFormat format = ais.getFormat(); byte[] bytes = IOUtils.toByteArray(ais);
StringBuilder sb = new StringBuilder();
int wc = 0, count = 0;
for (int i = 0; i < bytes.length; i++) {
if (wc == 0) {
sb.append("0x");
}
sb.append(String.format("%02x", bytes[i]));
wc++;
if (wc % width == 0 && i < bytes.length - 1) {
sb.append(", ");
wc = 0;
count++;
}
if (wc == 0 && count % LINE_LIMIT == 0) {
sb.append("\n");
count = 0;
}
} return String.format("Sample rate: %.2f Hz\nSample width: %d bits\nChannels: %d\nSamples: %d\n\n%s\n",
format.getSampleRate(),
format.getSampleSizeInBits(),
format.getChannels(),
bytes.length / width,
sb); } catch (Throwable t) {
throw new RuntimeException(t);
}
} public static void main(String[] args) {
String path = "/home/user/627b.wav";
String output = new Converter(path, 2).convert();
System.out.println(output);
}
}

二进制文件转Hex和Wav文件转Hex的Java代码的更多相关文章

  1. 【Java学习day04】Java文件的创建和Java代码的执行

    Java文件的创建和Java代码的执行 随便新建一个文件夹,存放代码 在新建的文件夹里新建一个java文件 新建一个文本文档 将新建的文本文档重命名为hello.java 注意了!后缀必须改为.jav ...

  2. Linux音频编程--使用ALSA库播放wav文件

    在UBUNTU系统上使用alsa库完成了对外播放的wav文件的案例. 案例代码: /** *test.c * *注意:这个例子在Ubuntu 12.04.1环境下编译运行成功. * */ #inclu ...

  3. HEX和BIN文件的区别

    以下的内容是从网上转载来的,原文地址:http://blog.csdn.net/zhangliang_571/article/details/8519469  在这里感谢原作者. 1,是在keil中编 ...

  4. 豹哥嵌入式讲堂:ARM Cortex-M开发之文件详解(8)- 镜像文件(.bin/.hex/.s19)

    大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是豹哥<ARM Cortex-M开发之文件详解>主 ...

  5. 痞子衡嵌入式:ARM Cortex-M文件那些事(8)- 镜像文件(.bin/.hex/.s19)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是痞子衡<ARM Cortex-M文件那些事>主 ...

  6. hex转mif文件 verilog

    用FPGA来跑ARM 核的时候,刚开始将Keil编译产生的hex文件拿来仿真和下到板子上的时候,发现程序运行不正确.细细观察仿真波形发现,在Altera的ROM IP中直接调用Keil产生的hex文件 ...

  7. C#读取wav文件

    private void showWAVForm(string filepath) //此函数只能用于读取16bit量化单声道的WAV文件 { FileStream fs = new FileStre ...

  8. delphi 合并两个 Wav 文件流的函数

    合并两个 Wav 文件的函数 实例一 unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphic ...

  9. wav文件系列_1_wav格式解读

    本文介绍 wav 文件格式,主要关注该类格式的结构. 参考: [1] 以一个wav文件为实例分析wav文件格式 ( 2017.04.11 CSDN ) [2] WAV ( Wikipedia ) [3 ...

  10. C++标准库实现WAV文件读写

    在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依赖于其他的库. WAV文件结构 ...

随机推荐

  1. 安装MicroStation软件、Terrasolid插件的方法

      本文介绍在Win10电脑中,安装MicroStation软件与Terrasolid插件合集的详细方法.   首先,我们需要有MicroStation软件与Terrasolid插件合集的安装包:这些 ...

  2. Keep English Level-03

    rule -- 统治,管理,规章,制度 ruling -- 裁决 ruler -- 统治者,尺子 district judge -- 地方法官 sweeping -- 一刀切的 haul --拉 ov ...

  3. 使用阿里canal实现mysql与Elasticsearch增量同步

    一.背景介绍 最近在做一个地理信息相关的项目,需要维护大量的地址描述数据,同时需要提供对数据检索的功能,准备采用Elasticsearch(6.7)实现.那么问题就来了,地址数据需要同时在MySQL和 ...

  4. [转帖]【最佳实践】prometheus 监控 sql server (使用sql_exporter)

    https://www.cnblogs.com/gered/p/13535212.html 目录 [0]核心参考 [简述] [1]安装配置 sql_exporter [1.1]下载解压 sql_exp ...

  5. [转帖]linux之iftop命令

    https://rumenz.com/rumenbiji/linux-iftop.html Linux安装iftop > yum install iftop -y > iftop 界面如下 ...

  6. [转帖]深入理解mysql-第十一章 mysql查询优化-Explain 详解(中)

    一.执行计划-type属性 执行计划的一条记录就代表着MySQL对某个表的执行查询时的访问方法,其中的type列就表明了这个访问这个单表的方法具体是什么,比方说下边这个查询: mysql> EX ...

  7. [转帖]Linux系统硬链接和软链接具体实例讲解(超详细)

    简介 在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名.文件名仅是为了方便人们的记忆和使用, ...

  8. [转帖]发布即巅峰!万字长文:Java性能调优六大工具:MAT内存分析工具

    jianshu.com/p/4ed3dd8b7b83 MAT是MemoryAnalyzerTool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况.MAT是 基 ...

  9. [转帖]011 Linux 打包与解压 tar

    https://my.oschina.net/u/3113381/blog/5429977 01 压缩.打包命令有哪些? Linux 上有着各种压缩.打包的工具:tar.gzip.zip.7z,而 t ...

  10. Spring Boot集成Actuator

    一.Spring-Boot-Actuator简介 官网:https://docs.spring.io/spring-boot/docs/2.3.4.BUILD-SNAPSHOT/reference/h ...