- 浏览: 2110833 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
无心流泪wan:
private static final Log log = ...
log4j Category.callAppenders Block -
yjxa901:
博主好: http://www.java.net/down ...
jdk debug -
aptech406328627:
大神,请接收我的膜拜吧,纠结了两天的问题,就这么让你给解决了 ...
java.lang.reflect.MalformedParameterizedTypeException -
xukunddp:
谢谢1楼,我也遇到,搞定了
java.lang.reflect.MalformedParameterizedTypeException -
di1984HIT:
学习了!!!!
jvmstat hsperfdata java.io.tmpdir
一些算法摘录自:
http://stackoverflow.com/questions/332079/in-java-how-do-i-convert-a-byte-array-to-a-string-of-hex-digits-while-keeping-le
http://rgagnon.com/javadetails/java-0596.html
http://stackoverflow.com/questions/140131/convert-a-string-representation-of-a-hex-dump-to-a-byte-array-using-java
发现经常需要使用这个函数,故放在blog上用于以后查看
一:字节数组转换到16进制形式的字符串
1:利用Integer的toHexString
/** * 字节数组转换成十六进制字符串 * * @param b 字节数组 * * @return 十六进制字符串 */ public static final String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int i = 0; i < b.length; i++) { stmp = Integer.toHexString(b[i] & 0xFF); if (stmp.length() == 1) { hs += "0" + stmp; } else { hs += stmp; } } return hs.toUpperCase(); }
2:利用BigInteger 和String.format
public static String toHex(byte[] bytes) { BigInteger bi = new BigInteger(1, bytes); return String.format("%0" + (bytes.length << 1) + "X", bi); }
3:利用BigInteger
public static String toHex(byte[] bytes) { BigInteger bi = new BigInteger(1, bytes); String result = bi.toString(16); if (result.length() % 2 != 0) { return "0" + result; } return result.toUpperCase(); }
4.1: & 神奇的数
public static String toHex(byte[] b) throws Exception { String result = ""; for (int i=0; i < b.length; i++) { result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 ); } return result.toUpperCase(); }
4.2 : + 神奇的数 (和上一个有关)
public static String toHex(byte[]bytes) { StringBuilder sb = new StringBuilder(bytes.length*2); for(byte b: bytes) sb.append(Integer.toHexString(b+0x800).substring(1)); return sb.toString().toUpperCase(); }
5.1:映射表 移位 &
public static String toHex( byte [] raw ) { String HEXES = "0123456789ABCDEF"; if ( raw == null ) { return null; } final StringBuilder hex = new StringBuilder( 2 * raw.length ); for ( final byte b : raw ) { hex.append(HEXES.charAt((b & 0xF0) >> 4)) .append(HEXES.charAt((b & 0x0F))); } return hex.toString(); }
5.1 :映射表 除法 取模
public static String toHex(byte[] bytes) { char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char[] hexChars = new char[bytes.length * 2]; int v; for ( int j = 0; j < bytes.length; j++ ) { v = bytes[j] & 0xFF; hexChars[j*2] = hexArray[v/16]; hexChars[j*2 + 1] = hexArray[v%16]; } return new String(hexChars); }
6:String.format
static String toHex(byte[] digest) { StringBuilder sb = new StringBuilder(); for (byte b : digest) { sb.append(String.format("%1$02X", b)); } return sb.toString(); }
二:十六进制字符串转为字节数组,上一个的逆过程
/** * 十六进制字符串转换成字节数组 * * @param hex 十六进制字符串 * * @return 字节数组 * * @throws IllegalArgumentException */ public static final byte[] hex2byte(String hex) throws IllegalArgumentException { if (hex.length() % 2 != 0) { throw new IllegalArgumentException(); } char[] arr = hex.toCharArray(); byte[] b = new byte[hex.length() / 2]; for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) { String swap = "" + arr[i++] + arr[i]; int byteint = Integer.parseInt(swap, 16) & 0xFF; b[j] = new Integer(byteint).byteValue(); } return b; }
新发现,其实JAVA中有提供这一函数,还可以偷窥其实现
javax.xml.bind.annotation.adapters.HexBinaryAdapter; public byte[] unmarshal(String s) { if(s==null) return null; return DatatypeConverter.parseHexBinary(s); } public String marshal(byte[] bytes) { if(bytes==null) return null; return DatatypeConverter.printHexBinary(bytes); }
其实很早以前看到一个实现更加简便的,但是忘了是什么了,有同学发现了告诉我下。
发表评论
-
groovy shell 安全
2017-01-18 11:29 1212groovy 可以动态执行代码,但是我们也想他在一定的沙箱中 ... -
eclipse 插件
2016-11-17 12:00 628eclipse remote editor https: ... -
java method signature
2013-08-12 21:07 2726case 'B': _type = T_BYT ... -
eclipse显示GC的按钮
2013-06-18 19:32 4347同事说idea的一个比较亮的功能是可以手动去GC,然后机器 ... -
好用的maven插件收集
2013-02-22 10:40 13521:Maven Shade Plugin(把所有jar打到一 ... -
查看JVM Flags
2013-01-09 14:22 1343-XX:+PrintFlagsFinal Jav ... -
开源的好用JVM问题排查工具
2013-01-08 09:45 1865TProfiler https://github.com/ ... -
java ocr
2013-01-04 13:06 3039java OCR相关的资料记录 Clara OC ... -
eclipse ast
2012-12-23 22:36 1021Eclipse JDT - Abstract Syntax ... -
正则生成器
2012-12-23 22:24 982能够依据普通文本给出可能的正则组合 http://ww ... -
Kilim
2012-12-14 23:40 1113Java 开发 2.0: Kilim 简介 h ... -
IO Design Patterns Reactor VS Proactor
2012-11-13 01:34 15141:两种高性能I/O设计模式(Reactor/Proactor ... -
antlr
2012-11-13 00:36 12271:使用 Antlr 开发领域语言 http://www.i ... -
java singalException
2012-11-12 21:39 986之前看到毕大师一封关于异常多造成的cpu us很高的分析邮件, ... -
log4j Category.callAppenders Block
2012-11-06 17:01 10164经常在高并发下就遇到log4j用错引起的线程block住的问题 ... -
Troubleshooting JDK
2012-10-26 14:13 1537收集整理下JDK自带的关于 Troubleshooting 的 ... -
JavaOne 2011 Content Catalog
2012-10-14 17:12 1174上一篇讲javaone 2012,这次找了下2011的资料。 ... -
JavaOne 2012 Content Catalog
2012-10-13 16:07 1315转载自:http://marxsoftware.blogspo ... -
Memory usage of Java
2012-10-01 17:30 1222用JDK自带的api计算size,每次都会有个多余的12,看了 ... -
GC roots
2012-10-01 17:07 18561:GC roots http://www.yourkit. ...
相关推荐
if (hexString.length() < 2) { hexString = '0' + hexString; } ``` 这个方法将一个10进制数字字符串转换成Hex字符串。 byte[]到Hex字符串的转换 byte[]可以被转换成Hex字符串。下面是一个示例代码: ```java ...
byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) byteArray[i] = (byte) charArray[i]; byte[] md5Byte = this.mad5.digest(byteArray); StringBuffer hex...
i < hexString.Length; i++) { c = hexString[i]; if (IsHexDigit(c)) newString += c; else discarded++; } if (newString.Length % 2 != 0) { discarded++; newString = newString.Substring(0, new...
- 首先,我们需要将16进制字符串转换为整数,可以使用`Val("&H" & hexStr)`,这里的`hexStr`是16进制字符串。然后,使用`ChrW()`函数将这个整数转换为对应的Unicode字符。例如: ```vb Dim hexStr As String hex...
qDebug() << hexStr; } ``` 这段代码首先打开文件,然后创建一个`QDataStream`实例来读取文件内容。我们设置字节顺序,通常是小端序(LittleEndian),因为大多数现代计算机系统使用这种字节序。接着,我们逐字节...
在Python中,二进制数据通常以字节(bytes)或字节数组(bytearray)的形式存在。`bin()`函数可以将整数转换为二进制字符串,而`hex()`函数则可以将整数转换为小写的十六进制字符串。如果要处理字节对象,可以使用内...
byte_array = bytearray.fromhex(hex_string) # 转换为列表 hex_list = list(byte_array) print(hex_list) # 输出结果:[83, 33, 106] ``` ##### 5. hexstring转换为str 将`'53216A'`转换为`'\x53\x21\x6a'`。 *...
i < hexString.Length; i++) { c = hexString[i]; if (IsHexDigit(c)) newString += c; else discarded++; } // if odd number of characters, discard last character if (newString.Length % 2 != 0) {...
此外,`bytes`还有类方法`fromhex()`,用于将16进制字符串转换为`bytes`对象。 `bytearray`则是一个可变的字节数组,它可以像列表一样进行增删改操作。它的初始化方法与`bytes`类似,只是在最后多了一个可选的`...
ByteArray := HexToBin(HexString); // 发送字节数组 ClientSocket.Socket.WriteBuffer(Pointer(ByteArray)^, Length(ByteArray)); end; ``` 四、接收十六进制数据 ClientSocket提供了`OnDataAvailable`事件来...
1. 使用 `bytearray.fromhex()` 将十六进制字符串转换为 `bytearray`。 2. 将 `bytearray` 转换为列表。 ```python x = '53216A' y = bytearray.fromhex(x) z = list(y) print(z) # 输出: [83, 33, 106] ``` #####...
i < hexString.Length; i += 2) { byte highNibble = HexCharToByte(hexString[i]); byte lowNibble = HexCharToByte(hexString[i + 1]); result[i / 2] = (byte)(highNibble << 4 | lowNibble); } return ...
if (val < 16) { hexValue.append("0"); } hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } catch (NoSuchAlgorithmException e) { System.out.println(e.toString()); e....
BYTE byteToSend = static_cast<BYTE>(hexValue); m_SerialPort.Write(&byteToSend, 1); ``` **处理数据接收** 在MFC中,通常使用CSerialPort类的OnReceive()事件处理函数来接收数据。收到的数据可能是字节流,需要...
Dim byteArray As Byte() = System.Text.Encoding.ASCII.GetBytes(data) ``` 注意,这里我们假设字符串是ASCII编码的,如果原始数据是Unicode或其他编码,应使用相应的Encoding对象。 3. **计算哈希值**:调用MD5...
byte_arr = bytearray(bytes_seq) hanzi_recovered = byte_arr.decode('GBK') print(hanzi_recovered) # 输出:汉字 ``` 2. 处理多字节字符:在UTF-8编码下,由于汉字可能由多个字节表示,16进制字符串的长度会...
byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) { byteArray[i] = (byte) charArray[i]; } ``` 将输入字符串转换为字节数组,以便进行加密处理。 - **执行MD5...
return ''.join(f'{n:02X}' for n in bytearray.fromhex(hex_data)) def send_hex_data(port, hex_data): ascii_data = hex_to_ascii(hex_data) for char in ascii_data: port.write(chr(ord(char))) # 假设...