javascript字节数组转换为16进制
java byte[]转16进制效率高内存底的方法 -回复
![java byte[]转16进制效率高内存底的方法 -回复](https://img.taocdn.com/s3/m/c3dcc97782c4bb4cf7ec4afe04a1b0717fd5b3e7.png)
java byte[]转16进制效率高内存底的方法-回复Java中,将byte数组转换为16进制的字符串是一种常见的操作。
在处理大量的数据时,如何高效地进行转换,并且使用尽可能少的内存是非常重要的。
在本文中,我将为您解释一种高效而低内存消耗的方法。
首先,让我们明确一下问题的要求。
我们需要将一个byte数组转换为16进制的字符串。
例如,如果我们有一个byte数组[10, 20, 30],我们希望得到一个字符串"0A141E"。
这个字符串表示了每个byte值的16进制表示。
要实现这个功能,我们可以使用Java内置的工具类来转换byte数组为16进制字符串。
这种方法是非常简单和直观的,但是它可能存在性能和内存消耗上的问题。
下面是一个使用这种方法的示例代码:javapublic String byteArrayToHexString(byte[] array) {StringBuilder sb = new StringBuilder();for (byte b : array) {sb.append(String.format("02X", b));}return sb.toString();}在上面的代码中,我们使用StringBuilder来逐个追加byte值的16进制表示。
然后,我们使用String.format方法将byte值转换为长度为2的16进制字符串,并将其追加到StringBuilder中。
最后,我们将StringBuilder转换为String并返回结果。
尽管这种方法非常简单,但是它可能存在性能问题。
在每次迭代中,我们都会创建一个新的String对象来保存中间结果,这可能导致频繁的垃圾回收和内存碎片化。
此外,由于StringBuilder的默认初始容量为16,当处理大量数据时,可能会导致多次扩容,进一步增加内存的使用。
为了解决这个问题,我们可以使用Java中的ByteBuffer和Hex类来提高性能和减少内存消耗。
byte数组转化成16进制字符串用法分析

byte数组转化成16进制字符串 ,C#中的overload,overwrite,override的区别C++ 实现Single Sever Simulation AFNetworking 更改请求时间iOSchrome插件,二维码自动生成 ,C编程方式进行控制台输入maven jar shade assembly配置 [XML]Maven pom.xml public:double angle;QPen ang_info_pen;};#endif[文件] MainWindow.cpp ~ 28KB[文件] MainWindow.h ~ 3KB//AngularJS 绑定鼠标左键、右键单击事件//API权限设计总结系统sign验证规则//Apriopri算法的简单实现#ifndef __MAINWINDOW_H__#define __MAINWINDOW_H__#include "ui_MainWindow.h"#include "Shape.h"#include <QtGui>class CDockWin;class CDrawWin:public QMainWindow,public Ui_Mainwin{Q_OBJECTpublic:CDrawWin(QWidget *parent = NULL);// 画图状态定义enum DRAW_STATUS{// 无画图状态DRAW_STATUS_NONE = 0,// 绘画当中DRAW_STATUS_DRAWING,// 移动DRAW_STATUS_DRAG,// 改变图元DRAW_STATUS_CHANGE};// 当前的菜单选择enum MENU_STATUS{// 无画图菜单MENU_STATUS_NONE = 0,// 画直线菜单MENU_STATUS_LINE,// 画圆菜单MENU_STATUS_CIRCLE,// 画矩形菜单MENU_STATUS_RECTANGE,MENU_STATUS_POLYGON,MENU_STATUS_ANGLE,MENU_STATIS_DEL};//定义当前创建的图形enum SHAPE_STATUS{SHAPE_NONE = 0,SHAPE_LINE,SHAPE_CIRCLE,SHAPE_RECTANGLE,SHAPE_POLYGON,SHAPE_ANGLE,SHAPE_SCALE};public://碰撞CShape *HitTest(QMouseEvent *event,bool &bHit,bool &bCtrlHit); //画图void paintEvent(QPaintEvent *event);void process_line(QMouseEvent *event);void process_circle(QMouseEvent *event);void process_rectangle(QMouseEvent *event);void process_polygon(QMouseEvent *event);void process_angle(QMouseEvent *event);// 鼠标按下捕获器void mousePressEvent(QMouseEvent* event);// 鼠标释放事件捕获器void mouseReleaseEvent(QMouseEvent *event);// 鼠标移动事件捕获器void mouseMoveEvent(QMouseEvent* event);void mouseDoubleClickEvent(QMouseEvent *event);void closeEvent(QCloseEvent *event);void timerEvent(QTimerEvent *event);public slots:void on_acOpen_triggered();void on_acDrawLine_triggered();void on_acDrawCircle_triggered();void on_acDrawRectange_triggered();void on_acSelect_triggered();void on_acSet_color_triggered();void on_acDrawPolygon_triggered();void on_acDrawAngle_triggered();void on_ac_Save_triggered();void on_ac_New_triggered();void on_acImage_triggered();void on_acDelete_triggered();void on_acSaveImage_triggered(); public:static int countShape;static int widLine;static unsigned char m_curMenuStatus; static unsigned char m_curDrawStatus; static unsigned char m_curShapestatus; QVector<CShape *> m_shapeList;QVector<QColor>m_colorList;QVector<unsigned char> m_shapeStatus; CShape *m_curShape;static CShape *m_tmp;static QColor m_hitCol;static QColor m_curCol;static QColor m_CirCol;static QColor m_RectCol;static QColor m_PolyCol;static QColor m_AngCol;static QColor m_tmpCol;static unsigned int color_Count;static unsigned int shape_Count;QLabel *m_time;QLabel *m_timeText;QDockWidget *m_dock;CDockWin *m_widget;bool maybeSave;QImage *m_image;QPixmap pixmap;bool delet_image;};[代码] [Google Go]代码package mainimport ("io/ioutil""net/http""net/""fmt""encoding/json")//----------------------------------// 黄金数据调用示例代码-聚合数据// 在线接口文档:www/docs/29//----------------------------------const APPKEY = "*******************" //您申请的APPKEYfunc main(){//1.上海黄金交易所Request1()//2.上海期货交易所Request2()//3.银行账户黄金Request3()}//1.上海黄金交易所func Request1(){//请求地址juhe :="web:8080/finance/gold/shgold"//初始化参数param:=.Values{}//配置请求参数,方法内部已处理encode问题,中文参数可以直接传参param.Set("key",APPKEY) //APP Keyparam.Set("v","") //JSON格式版本(0或1)默认为0//发送请求data,err:=Get(juhe,param)if err!=nil{fmt.Errorf("请求失败,错误信息:\r\n%v",err)}else{var netReturn map[string]interface{}json.Unmarshal(data,&netReturn)if netReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result"]) }}}//2.上海期货交易所func Request2(){//请求地址juhe :="web:8080/finance/gold/shfuture"//初始化参数param:=.Values{}//配置请求参数,方法内部已处理encode问题,中文参数可以直接传参param.Set("key",APPKEY) //APP Keyparam.Set("v","") //JSON格式版本(0或1)默认为0//发送请求data,err:=Get(juhe,param)if err!=nil{fmt.Errorf("请求失败,错误信息:\r\n%v",err)}else{var netReturn map[string]interface{}json.Unmarshal(data,&netReturn)if netReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result"]) }}}//3.银行账户黄金func Request3(){//请求地址juhe :="web:8080/finance/gold/bankgold"//初始化参数param:=.Values{}//配置请求参数,方法内部已处理encode问题,中文参数可以直接传参param.Set("key",APPKEY) //APP Key//发送请求data,err:=Get(juhe,param)if err!=nil{fmt.Errorf("请求失败,错误信息:\r\n%v",err)}else{var netReturn map[string]interface{}json.Unmarshal(data,&netReturn)if netReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result"]) }}}// get 网络请求func Get(api string,params .Values)(rs[]byte ,err error){var *.,err=.Parse(api)if err!=nil{fmt.Printf("解析错误:\r\n%v",err)return nil,err}//如果参数中有中文参数,这个方法会进行Encode.RawQuery=params.Encode()resp,err:=http.Get(.String())if err!=nil{fmt.Println("err:",err)return nil,err}defer resp.Body.Close()return ioutil.ReadAll(resp.Body)}// post 网络请求,params 是.Values类型func Post(api string, params .Values)(rs[]byte,err error){resp,err:=http.PostForm(api, params)if err!=nil{return nil ,err}defer resp.Body.Close()return ioutil.ReadAll(resp.Body)}代码描述:基于GO的黄金数据接口调用代码实例关联数据:黄金数据[代码] [C#]代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using ;using System.IO;using ;using System.Diagnostics;using System.Web;//----------------------------------// 黄金数据调用示例代码-聚合数据// 在线接口文档:www/docs/29// 代码中JsonObject类下载地址:/download/gcm3206021155665/7458439//----------------------------------namespace ConsoleAPI{class Program{static void Main(string[] args){string appkey = "*******************"; //配置您申请的appkey//1.上海黄金交易所string 1 = "web:8080/finance/gold/shgold";var parameters1 = new Dictionary<string, string>();parameters1.Add("key", appkey);//你申请的keyparameters1.Add("v" , ""); //JSON格式版本(0或1)默认为0string result1 = sendPost(1, parameters1, "get");JsonObject newObj1 = new JsonObject(result1);String errorCode1 = newObj1["error_code"].Value;if (errorCode1 == "0"){Debug.WriteLine("成功");Debug.WriteLine(newObj1);}else{//Debug.WriteLine("失败");Debug.WriteLine(newObj1["error_code"].Value+":"+newObj1["reason"].Value);}//2.上海期货交易所string 2 = "web:8080/finance/gold/shfuture";var parameters2 = new Dictionary<string, string>();parameters2.Add("key", appkey);//你申请的keyparameters2.Add("v" , ""); //JSON格式版本(0或1)默认为0string result2 = sendPost(2, parameters2, "get");JsonObject newObj2 = new JsonObject(result2);String errorCode2 = newObj2["error_code"].Value;if (errorCode2 == "0"){Debug.WriteLine("成功");Debug.WriteLine(newObj2);}else{//Debug.WriteLine("失败");Debug.WriteLine(newObj2["error_code"].Value+":"+newObj2["reason"].Value);}//3.银行账户黄金string 3 = "web:8080/finance/gold/bankgold";var parameters3 = new Dictionary<string, string>();parameters3.Add("key", appkey);//你申请的keystring result3 = sendPost(3, parameters3, "get");JsonObject newObj3 = new JsonObject(result3);String errorCode3 = newObj3["error_code"].Value;if (errorCode3 == "0"){Debug.WriteLine("成功");Debug.WriteLine(newObj3);}else{//Debug.WriteLine("失败");Debug.WriteLine(newObj3["error_code"].Value+":"+newObj3["reason"].Value);}}/// <summary>/// Http (GET/POST)/// </summary>/// <param name="">请求</param>/// <param name="parameters">请求参数</param>/// <param name="method">请求方法</param>/// <returns>响应内容</returns>static string sendPost(string , IDictionary<string, string> parameters, string method){if (method.ToLower() == "post"){HttpWebRequest req = null;HttpWebResponse rsp = null;System.IO.Stream reqStream = null;try{req = (HttpWebRequest)WebRequest.Create();req.Method = method;req.KeepAlive = false;req.ProtocolVersion = HttpVersion.Version10;req.Timeout = 5000;req.ContentType = "application/x-www-form-encoded;charset=utf-8";byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8"));reqStream = req.GetRequestStream();reqStream.Write(postData, 0, postData.Length);rsp = (HttpWebResponse)req.GetResponse();Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);return GetResponseAsString(rsp, encoding);}catch (Exception ex){return ex.Message;}finally{if (reqStream != null) reqStream.Close();if (rsp != null) rsp.Close();}}else{//创建请求HttpWebRequest request = (HttpWebRequest)WebRequest.Create( + "?" + BuildQuery(parameters, "utf8"));//GET请求request.Method = "GET";request.ReadWriteTimeout = 5000;request.ContentType = "text/html;charset=UTF-8";HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream myResponseStream = response.GetResponseStream();StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));//返回内容string retString = myStreamReader.ReadToEnd();return retString;}}/// <summary>/// 组装普通文本请求参数。
[转]Java中byte与16进制字符串的互相转换
![[转]Java中byte与16进制字符串的互相转换](https://img.taocdn.com/s3/m/e7464029182e453610661ed9ad51f01dc281573d.png)
[转]Java中byte与16进制字符串的互相转换本⽂转⾃:Java中byte⽤⼆进制表⽰占⽤8位,⽽我们知道16进制的每个字符需要⽤4位⼆进制位来表⽰(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的⾼4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。
即byte⽤⼗六进制表⽰只占2位。
同理,相反的转换也是将两个16进制字符转换成⼀个byte,原理同上。
根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了。
/**Java代码1. * Convert byte[] to hex string.这⾥我们可以将byte转换成int,然后利⽤Integer.toHexString(int)来转换成16进制字符串。
2. * @param src byte[] data3. * @return hex string4. */5. public static String bytesToHexString(byte[] src){6. StringBuilder stringBuilder = new StringBuilder("");7. if (src == null || src.length <= 0) {8. return null;9. }10. for (int i = 0; i < src.length; i++) {11. int v = src[i] & 0xFF;12. String hv = Integer.toHexString(v);13. if (hv.length() < 2) {14. stringBuilder.append(0);15. }16. stringBuilder.append(hv);17. }18. return stringBuilder.toString();19. }20. /**21. * Convert hex string to byte[]22. * @param hexString the hex string23. * @return byte[]24. */25. public static byte[] hexStringToBytes(String hexString) {26. if (hexString == null || hexString.equals("")) {27. return null;28. }29. hexString = hexString.toUpperCase();30. int length = hexString.length() / 2;31. char[] hexChars = hexString.toCharArray();32. byte[] d = new byte[length];33. for (int i = 0; i < length; i++) {34. int pos = i * 2;35. d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));36. }37. return d;38. }39. /**40. * Convert char to byte41. * @param c char42. * @return byte43. */44. private byte charToByte(char c) {45. return (byte) "0123456789ABCDEF".indexOf(c);46. }Java代码1. //将指定byte数组以16进制的形式打印到控制台2. public static void printHexString( byte[] b) {3. for (int i = 0; i < b.length; i++) {4. String hex = Integer.toHexString(b[i] & 0xFF);5. if (hex.length() == 1) {6. hex = '0' + hex;7. }8. System.out.print(hex.toUpperCase() );9. }10.11. }java中byte转换int时为何与0xff进⾏与运算在剖析该问题前请看如下代码Java代码1. public static String bytes2HexString(byte[] b) {2. String ret = "";3. for (int i = 0; i < b.length; i++) {4. String hex = Integer.toHexString(b[ i ] & 0xFF);5. if (hex.length() == 1) {6. hex = '0' + hex;7. }8. ret += hex.toUpperCase();9. }10. return ret;11. }上⾯是将byte[]转化⼗六进制的字符串,注意这⾥b[ i ] & 0xFF将⼀个byte和 0xFF进⾏了与运算,然后使⽤Integer.toHexString取得了⼗六进制字符串,可以看出b[ i ] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进⾏与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不⾏吗?答案是不⾏的.其原因在于:1.byte的⼤⼩为8bits⽽int的⼤⼩为32bits2.java的⼆进制采⽤的是补码形式在这⾥先温习下计算机基础理论byte是⼀个字节保存的,有8个位,即8个0、1。
十六进制字符串 字节数组相互转化

一、引言在计算机编程和数据处理中,经常会遇到需要将字符串表示的十六进制数转换为字节数组,或者将字节数组转换为十六进制字符串的情况。
这种转换涉及到了数字的表示和数据的存储,是计算机科学中的常见问题。
本文将介绍如何实现十六进制字符串和字节数组之间的相互转化,以及在实际编程中的应用。
二、十六进制字符串转字节数组1. 将十六进制字符串转换为字节数组的过程可以分为以下几个步骤:1) 需要将十六进制字符串按照两个字符一组进行分割,得到一个字符数组。
2) 将每一组字符转换为对应的字节,即将十六进制数转换为一个字节。
这个过程可以通过将每个十六进制字符转换为对应的整数,然后将两个整数合并为一个字节来实现。
3) 将得到的字节数组作为结果返回。
2. 以下是一个Java语言中将十六进制字符串转换为字节数组的示例代码:```javapublic byte[] hexStringToByteArray(String hexString) {int length = hexString.length();byte[] byteArray = new byte[length / 2];for (int i = 0; i < length; i += 2) {byteArray[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)+ Character.digit(hexString.charAt(i+1), 16)); }return byteArray;}```3. 实际应用中,可以根据具体的编程语言和需求,调用相应的库函数或者编写自己的转换函数来实现十六进制字符串到字节数组的转换。
三、字节数组转十六进制字符串1. 将字节数组转换为十六进制字符串的过程与将十六进制字符串转换为字节数组的过程相反,可以分为以下几个步骤:1) 需要遍历字节数组,并将每个字节转换为对应的两个十六进制字符。
javabyte数组与16进制间相互转换的示例

javabyte数组与16进制间相互转换的⽰例1.准备⼯作import java.util.Arrays;/*** Byte[]与hex的相互转换* @explain* @author Marydon* @creationTime 2018年6⽉11⽇下午2:29:11* @version 1.0* @since* @email marydon20170307@*/public class ByteUtils {// 16进制字符private static final char[] HEX_CHAR = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };}2.byte类型数组转化成16进制字符串 ⽅法⼀/*** ⽅法⼀:将byte类型数组转化成16进制字符串* @explain 字符串拼接* @param bytes* @return*/public static String toHexString(byte[] bytes) {StringBuilder sb = new StringBuilder();int num;for (byte b : bytes) {num = b < 0 ? 256 + b : b;sb.append(HEX_CHAR[num / 16]).append(HEX_CHAR[num % 16]);}return sb.toString();} ⽅法⼆/*** ⽅法⼆: byte[] to hex string* @explain 使⽤数组* @param bytes* @return*/public static String toHexString2(byte[] bytes) {// ⼀个byte为8位,可⽤两个⼗六进制位表⽰char[] buf = new char[bytes.length * 2];int a = 0;int index = 0;// 使⽤除与取余进⾏转换for (byte b : bytes) {if (b < 0)a = 256 + b;elsea = b;// 偶数位⽤商表⽰buf[index++] = HEX_CHAR[a / 16];// 奇数位⽤余数表⽰buf[index++] = HEX_CHAR[a % 16];}// char[]-->Stringreturn new String(buf);} ⽅法三/*** ⽅法三: byte[]-->hexString* @explain 使⽤位运算* @param bytes* @return*/public static String toHexString3(byte[] bytes) {char[] buf = new char[bytes.length * 2];int index = 0;// 利⽤位运算进⾏转换,可以看作⽅法⼆的变型for (byte b : bytes) {buf[index++] = HEX_CHAR[b >>> 4 & 0xf];buf[index++] = HEX_CHAR[b & 0xf];return new String(buf);} ⽅法四/*** ⽅法四:byte[]-->hexString* @param bytes* @return*/public static String toHexString4(byte[] bytes) {StringBuilder sb = new StringBuilder(bytes.length * 2);// 使⽤String的format⽅法进⾏转换for (byte b : bytes) {sb.append(String.format("%02x", new Integer(b & 0xff)));}return sb.toString();} ⽅法五/*** 将byte数组转换成16进制字符串** @param src* @return*/private static String bytesToHexString(byte[] src) {StringBuilder sb = new StringBuilder();for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v);if (hv.length() < 2) {sb.append(0);}sb.append(hv);}return sb.toString();} 3.16进制字符串转换为byte[] ⽅法⼀/*** 将16进制字符串转换为byte[]* @explain 16进制字符串不区分⼤⼩写,返回的数组相同* @param hexString* 16进制字符串* @return byte[]*/public static byte[] fromHexString(String hexString) {if (null == hexString || "".equals(hexString.trim())) {return new byte[0];}byte[] bytes = new byte[hexString.length() / 2];// 16进制字符串String hex;for (int i = 0; i < hexString.length() / 2; i++) {// 每次截取2位hex = hexString.substring(i * 2, i * 2 + 2);// 16进制-->⼗进制bytes[i] = (byte) Integer.parseInt(hex, 16);}return bytes;} ⽅法⼆/*** 将16进制转换为byte[]* @param hexStr* @return*/public static byte[] fromHex(String hexStr) {if (hexStr.length() < 1)return null;byte[] result = new byte[hexStr.length() / 2];for (int i = 0; i < hexStr.length() / 2; i++) {int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16); int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16); result[i] = (byte) (high * 16 + low);}return result; ⽅法三:public static byte[] toByteArray(String data) {if (data == null) {return new byte[] {};}if (data.length() == 0) {return new byte[] {};}while (data.length() < 2) {data = "0" + data;}if (data.substring(0, 2).toLowerCase().equals("0x")) {data = data.substring(2);}if (data.length() % 2 == 1) {data = "0" + data;}data = data.toUpperCase();byte[] bytes = new byte[data.length() / 2];String hexString = "0123456789ABCDEF";for (int i = 0; i < bytes.length; i++) {int byteConv = hexString.indexOf(data.charAt(i * 2)) * 0x10;byteConv += hexString.indexOf(data.charAt(i * 2 + 1));bytes[i] = (byte) (byteConv & 0xFF);}return bytes;} 4.测试public static void main(String[] args) throws Exception {String json = "{\"name\":\"Marydon\",\"website\":\"/Marydon20170307\"}";byte[] bytes = json.getBytes("utf-8");System.out.println("字节数组为:" + Arrays.toString(bytes));System.out.println("byte数组转16进制之⽅法⼀:" + toHexString(bytes));System.out.println("byte数组转16进制之⽅法⼆:" + ByteUtils.toHexString2(bytes));System.out.println("byte数组转16进制之⽅法三:" + ByteUtils.toHexString3(bytes));System.out.println("byte数组转16进制之⽅法四:" + ByteUtils.toHexString4(bytes));System.out.println("==================================");String str = "7b226e616d65223a224d617279646f6e222c2277656273697465223a22687474703a2f2f7777772e636e626c6f67732e636f6d2f4d617279646f6e3230313730333037227d"; System.out.println("转换后的字节数组:" + Arrays.toString(fromHexString(str)));System.out.println(new String(fromHexString(str), "utf-8"));}补充 1B=8b,也就是1byte=8bit; 1KB=1024B; 1MB=1024KB; 1GB=1024MB; 1TB=1024GB bit是计算机最⼩的存储单元,只能存储0和1,是Binary digit(⼆进制数位)的缩写,意为“位”或“⽐特”,也就是⼆进制。
byte数组 16进制

byte数组 16进制byte数组是一种在计算机中广泛使用的数据类型,它由一系列字节组成,每个字节都由8个二进制位组成。
在计算机中,字节是最小的可寻址存储单位,因此byte数组可以用于存储和传输各种类型的数据。
在本文中,我们将重点介绍byte数组的16进制表示方式。
在计算机中,16进制是一种常用的数字表示方式,它使用16个数字字符来表示数字0到15。
这些数字字符包括0、1、2、3、4、5、6、7、8、9、A、B、C、D、E和F。
在16进制中,每个数字字符都对应于4个二进制位。
因此,一个byte可以用两个16进制数字来表示。
例如,byte值为0x3A可以表示为16进制字符串'3A'。
在Java编程语言中,byte数组可以用byte[]类型来声明和定义。
例如,以下代码定义了一个长度为4的byte数组:byte[] byteArray = new byte[4];要将byte数组转换为16进制字符串,可以使用Java中的两个方法:Byte.toHexString()和DatatypeConverter.printHexBinary()。
Byte.toHexString()方法将一个byte值转换为16进制字符串。
例如,以下代码将byte值为0x3A转换为16进制字符串:byte b = 0x3A;String hexString = Byte.toHexString(b);在Java 9之前,Byte.toHexString()方法只能用于转换单个byte 值。
如果要将整个byte数组转换为16进制字符串,必须使用循环遍历数组的方式。
例如,以下代码将byte数组转换为16进制字符串:byte[] byteArray = {0x12, 0x34, 0x56, (byte) 0x78};StringBuilder hexString = new StringBuilder();for (byte b : byteArray) {hexString.append(Byte.toHexString(b));}DatatypeConverter.printHexBinary()方法可以将任何byte数组转换为16进制字符串。
16进制与字符串、字节数组之间的转换

在串口通讯过程中,经常要用到16进制与字符串、字节数组之间的转换private string StringToHexString(string s,Encoding encode){byte[] b = encode.GetBytes(s);//按照指定编码将string编程字节数组 string result = string.Empty;for (int i = 0; i < b.Length; i++)//逐字节变为16进制字符,以%隔开{result += "%"+Convert.ToString(b[i], 16);}return result;}private string HexStringToString(string hs, Encoding encode){ //以%分割字符串,并去掉空字符string[] chars = hs.Split(new char[]{'%'},StringSplitOptions.RemoveEmptyEntries);byte[] b = new byte[chars.Length];for (int i = 0; i < chars.Length; i++){b[i] = Convert.ToByte(chars[i], 16);}//按照指定编码将字节数组变为字符串return encode.GetString(b);}字符串转16进制字节数组private static byte[] strToToHexByte(string hexString){hexString = hexString.Replace(" ", "");if ((hexString.Length % 2) != 0)hexString += " ";byte[] returnBytes = new byte[hexString.Length / 2];for (int i = 0; i < returnBytes.Length; i++)returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2),16);return returnBytes;}字节数组转16进制字符串public static string byteToHexStr(byte[] bytes){string returnStr = "";if (bytes != null){for (int i = 0; i < bytes.Length; i++){returnStr += bytes[i].ToString("X2");}}return returnStr;}从汉字转换到16进制public static string ToHex(string s, string charset, bool fenge) {if ((s.Length % 2) != 0){s += " ";//空格//throw new ArgumentException("s is not valid chinese string!");}System.Text.Encoding chs = System.Text.Encoding.GetEncoding(char set);byte[] bytes = chs.GetBytes(s);string str = "";for (int i = 0; i < bytes.Length; i++){str += string.Format("{0:X}", bytes[i]);if (fenge && (i != bytes.Length - 1)){str += string.Format("{0}", ",");}}return str.ToLower();}16进制转换成汉字public static string UnHex(string hex, string charset){if(hex == null)throw new ArgumentNullException("hex");hex = hex.Replace(",", "");hex = hex.Replace("\n", "");hex = hex.Replace("\\", "");hex = hex.Replace(" ", "");if(hex.Length % 2!= 0){hex += "20";//空格} // 需要将hex 转换成byte 数组。
javascript字节数组转换为16进制

javascript字节数组转换为16进制/*** byte数组转换成16进制字符串* @param src* @return*/bytesToHexString(byte[] src){ public static StringStringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length <= 0) {return null;}for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v);if (hv.length() < 2) {stringBuilder.append(0);}stringBuilder.append(hv);}return stringBuilder.toString(); }/*** 根据文件流读取图片文件真实类型* @param is* @return*/public static String getTypeByStream(FileInputStream is){ byte[] b = new byte[4];try {is.read(b, 0, b.length);} catch (IOException e) {e.printStackTrace();}String type = bytesToHexString(b).toUpperCase();if(type.contains("FFD8FF")){return "jpg";}else if(type.contains("89504E47")){return "png";}else if(type.contains("47494638")){return "gif";}else if(type.contains("49492A00")){ return "tif";}else if(type.contains("424D")){return "bmp";}return type;}public static void main(String[] args) throws Exception {// String src = "D:/workspace//8129.jpg"; // String src ="D:/workspace//temp/1.gif";String src = "D:/workspace//temp/2.bmp";FileInputStream is = new FileInputStream(src); // byte[] b = new byte[4];// is.read(b, 0, b.length);// System.out.println(bytesToHexString(b));String type = getTypeByStream(is);System.out.println(type);/** JPEG (jpg),文件头:FFD8FFPNG (png),文件头:89504E47GIF (gif),文件头:47494638TIFF (tif),文件头:49492A00Windows Bitmap (bmp),文件头:424D*/}==================================用文件头判断。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
javascript字节数组转换为16进制/**
* byte数组转换成16进制字符串
* @param src
* @return
*/
bytesToHexString(byte[] src){ public static String
StringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString(); }
/**
* 根据文件流读取图片文件真实类型
* @param is
* @return
*/
public static String getTypeByStream(FileInputStream is){ byte[] b = new byte[4];
try {
is.read(b, 0, b.length);
} catch (IOException e) {
e.printStackTrace();
}
String type = bytesToHexString(b).toUpperCase();
if(type.contains("FFD8FF")){
return "jpg";
}else if(type.contains("89504E47")){
return "png";
}else if(type.contains("47494638")){
return "gif";
}else if(type.contains("49492A00")){ return "tif";
}else if(type.contains("424D")){
return "bmp";
}
return type;
}
public static void main(String[] args) throws Exception {
// String src = "D:/workspace//8129.jpg"; // String src =
"D:/workspace//temp/1.gif";
String src = "D:/workspace//temp/2.bmp";
FileInputStream is = new FileInputStream(src); // byte[] b = new byte[4];
// is.read(b, 0, b.length);
// System.out.println(bytesToHexString(b));
String type = getTypeByStream(is);
System.out.println(type);
/*
* JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424D
*/
}
==================================
用文件头判断。
直接读取文件的前几个字节。
常用文件的文件头如下:
JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424D CAD (dwg),文件头:41433130
Adobe Photoshop (psd),文件头:38425053 Rich Text Format (rtf),文件头:7B5C727466 XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
Email [thorough only] (eml),文件头:44656C69766572792D646174653A Outlook Express (dbx),文件头:CFAD12FEC5FD746F Outlook (pst),文件头:2142444E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0 MS Access (mdb),文件头:5374616E64617264204A WordPerfect (wpd),文件头:FF575043 Postscript. (eps.or.ps),文件头:252150532D41646F6265
Adobe Acrobat (pdf),文件头:255044462D312E Quicken (qdf),文件
头:AC9EBD8F
Windows Password (pwl),文件头:E3828596 ZIP Archive (zip),文件头:504B0304 RAR Archive (rar),文件头:52617221
Wave (wav),文件头:57415645
AVI (avi),文件头:41564920
Real Audio (ram),文件头:2E7261FD
Real Media (rm),文件头:2E524D46 MPEG (mpg),文件头:000001BA
MPEG (mpg),文件头:000001B3
Quicktime (mov),文件头:6D6F6F76
Windows Media (asf),文件头:3026B2758E66CF11 MIDI (mid),文件
头:4D546864。