import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
*
* 文件,byte[],HexString 之间的转换
*
*/
public class FileDataConvert {
public static void main(String[] args) {
String srcFilePath = "d:/testFrom.png";
String outFilePath = "d:/";
String outFileName = "testTo.png";
byte[] bytes = getBytesFromFile(srcFilePath);
String str = bytes2HexString(bytes);
System.out.println(str);
byte[] bytes2 = hexString2Bytes(str);
saveBytes2File(bytes2, outFilePath, outFileName);
}
/**
* 从文件中获取byte数组
*/
public static byte[] getBytesFromFile(String filePath) {
byte[] buffer = null;
try {
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
/**
* 根据byte数组生成文件
*/
public static void saveBytes2File(byte[] bfile, String filePath, String fileName) {
BufferedOutputStream bos = null;
FileOutputStream fos = null;
File file = null;
try {
File dir = new File(filePath);
if (!dir.exists() && dir.isDirectory()) {
dir.mkdirs();
}
file = new File(filePath + "\\" + fileName);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(bfile);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
/**
* 从字节数组到十六进制字符串转换
*/
public static String bytes2HexString(byte[] b) {
byte[] buff = new byte[2 * b.length];
for (int i = 0; i < b.length; i++) {
buff[2 * i] = hex[(b[i] >> 4) & 0x0f];
buff[2 * i + 1] = hex[b[i] & 0x0f];
}
return new String(buff);
}
/**
* 从十六进制字符串到字节数组转换
*/
public static byte[] hexString2Bytes(String hexstr) {
byte[] b = new byte[hexstr.length() / 2];
int j = 0;
for (int i = 0; i < b.length; i++) {
char c0 = hexstr.charAt(j++);
char c1 = hexstr.charAt(j++);
b[i] = (byte) ((parse(c0) << 4) | parse(c1));
}
return b;
}
private final static byte[] hex = "0123456789ABCDEF".getBytes();
private static int parse(char c) {
if (c >= 'a')
return (c - 'a' + 10) & 0x0f;
if (c >= 'A')
return (c - 'A' + 10) & 0x0f;
return (c - '0') & 0x0f;
}
}
分享到:
相关推荐
在Java或类似的编程语言中,我们经常会遇到需要将字符串(String)与字节数组(Byte[])以及十六进制表示的字符串(Hex)进行相互转换的情况。这些转换在处理网络通信、文件存储、加密解密等领域尤为关键。下面我们...
在Android开发中,数据在内存和磁盘之间传输时,我们经常需要在`byte[]`(字节数组)和`String`之间进行转换。这是因为`byte[]`适合处理二进制数据,如图片、音频文件等,而`String`则更适合存储文本信息。本篇将...
在Java开发中,字符串(String)、十六进制表示的字符串以及字节数组(byte[])之间的转换是非常常见的需求,尤其是在处理网络通信、文件读写等场景下。本文将详细介绍如何在Java中实现这些数据类型之间的相互转换,...
例如,在网络通信、文件存储等场景中,经常需要将二进制数据(通常表示为`byte`数组)转换为十六进制字符串形式(即`hex`),或者相反地,将十六进制字符串转回二进制数据。这种需求催生了两个重要的函数:`hex2byte...
在C#编程语言中,字符串(string)与字节数组(byte array)之间的转换是常见的操作,尤其在处理二进制数据、网络传输或文件读写时。本篇文章将详细解析C#中如何进行这两种数据类型的转换,并讨论转换过程中需要注意...
本项目涉及的主题是"C#编写的Hex转string文件串口下载数据",这涵盖了两个主要方面:HEX文件处理和串口通信。下面我们将深入探讨这两个核心知识点。 首先,HEX文件处理是编程中常见的任务,尤其是在低级硬件交互...
在C#编程中,字符串(string)与字节(byte[])之间的转换是常见的操作,特别是在处理网络传输、文件存储或数据解析时。本文将详细讲解C#中如何进行这两种类型之间的转换,并提供一些实用的方法。 首先,我们来看如何将...
在C#编程语言中,字符串(string)与字节数组(byte[])之间的转换是常见的操作,特别是在处理网络通信、文件读写或数据编码解码等场景。本篇文章将详细探讨C#中如何实现这两种类型之间的转换,并提供实用的代码示例...
在C#编程环境中,有时我们需要处理不同格式的二进制数据,例如将十六进制(Hex)文件转换为二进制(Bin)文件。这个过程通常涉及到对文件内容的读取、解析、转换以及写入等步骤。下面将详细探讨如何使用C#进行Hex到...
public static byte[] hexToBytes(String hex) { int len = hex.length(); byte[] data = new byte[len / 2]; for (int i = 0; i ; i += 2) { data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) ) + ...
在C#编程语言中,数据类型`Byte[]`(字节数组)和`String`之间的转换是非常常见的操作,特别是在处理文件、网络传输或数据存储时。这两种类型之间的转换涉及到字符编码的概念,因为字符需要通过特定的编码方式转换成...
在编程领域,尤其是在C++中,理解数据类型如`float`如何在内存中表示以及如何进行不同格式(如十六进制HEX)之间的转换是非常重要的。`float`型数据是用于存储浮点数的标准数据类型,它在内存中遵循特定的格式,即...
hexstring转换为整形列表 将`'53216A'`转换为`[0x53, 0x21, 0x6A]`。 **步骤**: - 使用`bytearray.fromhex()`函数将十六进制字符串转换为`bytearray`。 - 再将`bytearray`转换为列表。 **代码示例**: ```...
byte[] bytes = Convert.FromHex(hexString); ``` Python则有内置的`binascii`模块,可以方便地完成转换: ```python import binascii hexString = "your_hex_string" bytesArray = binascii.unhexlify(hexString)...
- **Java**:使用`Byte.parseByte(hexString, 16)`将16进制字符串转换为byte,使用`byte[] bytes = new byte[hexStringLength / 2]`创建数组,然后通过循环将byte值存入数组。 - **Python**:使用`bytes.fromhex...
通过上述介绍,我们可以看出这个工具在Go开发中扮演着重要角色,帮助开发者高效地处理16进制字符串与10进制byte数组之间的转换。如果你需要进一步了解或使用这个工具,可以查看`convert-master`压缩包内的源代码。
根据给定文件的信息,我们可以总结出以下关于C#中十六进制与字符串、字节数组之间转换的相关知识点: ### C#中十六进制与字符串、字节数组之间的转换 #### 一、概述 在计算机编程中,经常需要进行不同数据格式...
- `Integer.toHexString()`和`Integer.parseInt(hexStr, 16)`是十六进制字符串与整数之间转换的常用方法。 4. **字符编码与解码**: Java中的`Character`类提供了处理单个字符的方法。例如,可以使用`Character....
本文将详细介绍如何在Java中将`byte`数组与其他基本数据类型(如`int`、`long`、`short`、`byte`)之间进行转换。 首先,我们来看`byte`到`int`的转换。Java中的`byte`类型是8位的,取值范围是-128到127。如果要将...
在计算机编程领域,数据的转换是一项非常重要的工作,尤其是在处理网络通信、文件读写等场景时。本文将详细介绍如何在.NET框架下实现字符串与字节数组之间的转换,特别是字符串到16进制数组的转换以及反过来的转换...