/**
     * 字符串转16进制byte
* @param
* @return
* @throws Exception
* @author hw
* @date 2018/10/19 9:47
*/
private static byte hexStr2Str(String hexStr) {
String str = "0123456789abcdef";
char[] hexs = hexStr.toCharArray();
int n = 0;
n = str.indexOf(hexs[0]) * 16;
n += str.indexOf(hexs[1]);
byte bytes = (byte) (n & 0xff); return bytes;
}

输入:"80"

输出:0x80 , 打印出为  -128

注:

0x80 表示 128,(0x 代表 16 进制,8 * 16¹ + 0 * 16º = 128),128 的二进制是 10000000,即 2 的 7 次方。
byte 共有 8 位,表示范围是 -128 ~ 127,二进制即 10000000 ~ 01111111,第一位为符号位,1 表示负数,0 表示整数,11111111 即表示 -127,10000000 比较特殊,表示 -128。

所以,0x80 本来是整数的 128,二进制 00000000000000000000000010000000 (Java 中整数4个字节32位)。(byte)0x80,将其转换为 byte,即截取最后 8 位,即 10000000,就是 byte 中的 -128。

/**
* 将16进制字符串转换为byte[]
*
* @param str
* @return
*/
public static byte[] toBytes(String str) {
if(str == null || str.trim().equals("")) {
return new byte[0];
} byte[] bytes = new byte[str.length() / 2];
for(int i = 0; i < str.length() / 2; i++) {
String subStr = str.substring(i * 2, i * 2 + 2);
bytes[i] = (byte) Integer.parseInt(subStr, 16);
} return bytes;
}
 public static void main(String[] args) throws UnsupportedEncodingException {
String str = "80b58be8af95";
System.out.println("转换后的字节数组:" + Arrays.toString(toBytes(str)));
}

输出:

转换后的字节数组:[-128, -75, -117, -24, -81, -107]

/**
* 将数组以字符串形式存储
* @param
* @return
* @throws Exception
* @author hw
* @date 2018/10/19 9:45
*/
public static void saveFile2(byte[] bfile, String filename) throws IOException {
String fileURI ="D:\\" + filename;
try {
File file = new File(fileURI);
if(!file.exists()){
file.createNewFile();
}
FileWriter fw = new FileWriter(file);
BufferedWriter out = new BufferedWriter(fw);
out.write(toHexString1(bfile));
out.close();
} catch (IOException e) {
e.printStackTrace();
}
} public static String toHexString1(byte[] b){
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < b.length; ++i){
buffer.append(toHexString1(b[i]));
}
String str = buffer.toString().substring(0,buffer.length()-1);
return str;
} public static String toHexString1(byte b){
String s = Integer.toHexString(b & 0xFF);
if (s.length() == 1){
return "0" + s +",";
}else{
return s+",";
}
}
输入:byte[] bytes1 = { (byte)0xE2, (byte)0xa8, 0x34, (byte)0x80,(byte)0x91,0x22,0x33,0x44,0x55,0x66,0x77};
输出:E2, a8,34,80,91,22,33,44,55,66,77
/**
* 读取文件
* @param
* @return
* @throws Exception
* @author hw
* @date 2018/10/17 19:59
*/
public static byte[] readFile(String filePath) throws IOException {
File file = new File(filePath);
ByteArrayOutputStream out = null;
FileInputStream in =null;
try {
in = new FileInputStream(file);
out = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int i = 0;
while ((i = in.read(b)) != -1) {
String str = new String(b,0,i);
out.write(str.getBytes(), 0, str.getBytes().length);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
out.close();
in.close();
} byte[] bytes = out.toByteArray();
return bytes;
}
/**
* 读取文件存为byte[]
* @param
* @return
* @throws Exception
* @author hw
* @date 2018/10/19 9:48
*/
@ResponseBody
@RequestMapping(value = "/fileToByte", method = RequestMethod.GET)
public void fileToByte() throws Exception {
String filePath1 = "D:\\test1.txt";
byte[] bytes1 = readFile(filePath1);
String str1= new String (bytes1);
String[] strs1 = str1.split(","); String filePath2 = "D:\\test2.txt";
byte[] bytes2 = readFile(filePath2);
String str2 = new String(bytes2); String[] strs2 = str2.split(",");
byte[] bytes3 = new byte[strs2.length];
for(int i = 0 ; i<strs2.length ; i++){
bytes3[i] =hexStr2Str(strs2[i]);
} // String[] strs1={"2","5","7","9"};
// String[] strs2 = {"e2","af","34","80","11","22","33","44","55","66","77"}; int start = 0;
int end = 0;
for(int i = 0; i<strs1.length;i++){
end = Integer.valueOf(strs1[i]);
byte[] byte_1 = new byte[end - start]; System.arraycopy(bytes3, start, byte_1, 0, end - start);
start = end; bytes.offer(byte_1);
System.out.println("处理文件当前队列大小" + bytes.size());
}
}

byte处理的几种方法的更多相关文章

  1. C# byte[]数组和string的互相转化 (四种方法)

    C# byte[]数组和string的互相转化 (四种方法) 第一种 [csharp] view plain copy string str = System.Text.Encoding.UTF8.G ...

  2. delphi中将 4 个 Byte 合成 1 个 Integer 的五种方法

    有4个字节类型的值,用移位或逻辑运算符怎么合成一个整数?比如 $FFEEDDCC.高$FF$EE$DD$CC低 //方法 1: 共用内存procedure TForm1.Button1Click(Se ...

  3. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

  4. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

  5. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  6. 简要介绍BASE64、MD5、SHA、HMAC几种方法。

    加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了.     言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     ...

  7. VB模拟键盘输入的N种方法

    VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...

  8. 使用C#进行图像处理的几种方法(转)

    本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像 ...

  9. 第10章 同步设备I/O和异步设备I/O(3)_接收I/O请求完成通知的4种方法

    10.5 接收I/O请求完成的通知 (1)I/O请求被加入设备驱动程序的队列,当请求完成以后,设备驱动也要负责通知我们I/O请求己经完成. (2)可以用4种方法来接收I/O请求己经完成的通知 技术 特 ...

随机推荐

  1. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)

    题目链接:http://www.codeforces.com/problemset/problem/281/A题意:将一个英文字母的首字母变成大写,然后输出.C++代码: #include <c ...

  2. js验证checkboxlist是否有选中的项

    function Check() { var cbl = document.getElementById("<%= ddlSurveyCompanyName.ClientID %> ...

  3. windows7内核分析之x86&x64第二章系统调用

    windows7内核分析之x86&x64第二章系统调用 2.1内核与系统调用 上节讲到进入内核五种方式 其中一种就是 系统调用 syscall/sysenter或者int 2e(在 64 位环 ...

  4. Android——简单对话框实现

    点击一个Button,弹出一个简单的对话框: bn3.setOnClickListener(new View.OnClickListener() { public void onClick(View ...

  5. sqlserver添加查询 表、字段注释(转)

    环境:xp sp3,sql server2008 .sqlserver用语句给表注释 EXECUTE sp_addextendedproperty N'MS_Description', N'表注释', ...

  6. Android 编译时:m、mm、mmm、mma、mmma的区别

    m:编译整个安卓系统 makes from the top of the tree mm:编译当前目录下的模块,当前目录下需要有Android.mk这个makefile文件,否则就往上找最近的Andr ...

  7. LeetCode 37 Sudoku Solver(求解数独)

    题目链接: https://leetcode.com/problems/sudoku-solver/?tab=Description   Problem : 解决数独问题,给出一个二维数组,将这个数独 ...

  8. 小米2s线刷出现remote: partition table doesn't exist

    =================问题============ 小米2s线刷出现remote: partition table doesn't exist =================解决方案= ...

  9. 应用程序创建自己的奔溃转储(crash dump)文件

    1.注册自定义的UnhandledExceptionFilter,C/C++ Runtime Library下需要注意自定义handler被移除(hook kernel32.dll的SetUnhand ...

  10. ASP.NET MVC 使用Redis共享Session

    储存模式 1.InProc模式 这是ASP.NET默认的Session管理模式,在应用进程内维护Session. 2.StateServer模式 这是在服务器装了.NET环境后自带的一个StateSe ...