byte处理的几种方法
/**
* 字符串转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处理的几种方法的更多相关文章
- C# byte[]数组和string的互相转化 (四种方法)
C# byte[]数组和string的互相转化 (四种方法) 第一种 [csharp] view plain copy string str = System.Text.Encoding.UTF8.G ...
- delphi中将 4 个 Byte 合成 1 个 Integer 的五种方法
有4个字节类型的值,用移位或逻辑运算符怎么合成一个整数?比如 $FFEEDDCC.高$FF$EE$DD$CC低 //方法 1: 共用内存procedure TForm1.Button1Click(Se ...
- windows下获取IP地址的两种方法
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
- [转载]C#读写txt文件的两种方法介绍
C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...
- WPF程序将DLL嵌入到EXE的两种方法
WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...
- 简要介绍BASE64、MD5、SHA、HMAC几种方法。
加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了. 言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书. ...
- VB模拟键盘输入的N种方法
VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...
- 使用C#进行图像处理的几种方法(转)
本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像 ...
- 第10章 同步设备I/O和异步设备I/O(3)_接收I/O请求完成通知的4种方法
10.5 接收I/O请求完成的通知 (1)I/O请求被加入设备驱动程序的队列,当请求完成以后,设备驱动也要负责通知我们I/O请求己经完成. (2)可以用4种方法来接收I/O请求己经完成的通知 技术 特 ...
随机推荐
- 《Lua程序设计》9.2 管道(pipe)与过滤器(filter) 包含使用协同函数实现“生产者——消费者”问题的实例代码
一个关于协同程序的经典示例是“生产者-消费者”问题.这其中涉及到两个函数,一个函数不断地产生值(比如从一个文件中读取值),另一个则不断地消费这些值(比如将这些值写到另一个文件).通常,这两个函数大致是 ...
- <转>github入门到上传本地项目
转自 http://www.cnblogs.com/specter45/p/github.html GitHub是基于git实现的代码托管.git是目前最好用的版本控制系统了,非常受欢迎,比之svn更 ...
- WP8.1学习系列(第十二章)——全景控件Panorama开发指南
2014/6/18 适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1 全景体验是本机 Windows ...
- 【cs229-Lecture10】特征选择
本节课要点: VC维: 模型选择算法 特征选择 vc维:个人还是不太理解.个人的感觉就是为核函数做理论依据,低维线性不可分时,映射到高维就可分,那么映射到多高呢?我把可分理解为“打散”. 参考的资料: ...
- xmapp 404设置
这样做的好处一个是很友好,另一个是对于你的网站会更安全些,如果没设置,别人在你的网址后随便输入一个路径,会显示404错误,并且会显示你的服务器版本号,服务器配置一目了然,为了避免这种情况,可以设置错误 ...
- 题目1100:最短路径(最短路径问题进阶dijkstra算法)
题目链接:http://ac.jobdu.com/problem.php?pid=1100 详细链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- [原]Linux下清空文件内容的三种方法
========问题======== 有些文件需要清空内容而不改变属性 =======解决方案====== 1.直接删除,创建同名文件.(这种方法的弊端是有可能这个文件带着权限或者是属性,那么你新建这 ...
- linux各种版本下载地址
本文转载地址:http://52199999.blog.51cto.com/740826/290179 觉得好大家给顶顶,先谢谢了!呵呵 首先提供两个镜像站:http://mirrors.sohu.c ...
- mysql里查看时间
MariaDB [jumpserver]> select current_time;+--------------+| current_time |+--------------+| 16:22 ...
- Linux性能监控命令——sar
介绍 sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的 ...