package com.relonger.cclj.weight;
public final class BytesUtils {
/**
* 二进制字符串转二进制数组,中间要用逗号隔开
* 只能处理无符号的数值
* 例如:00111011,01111111都可以处理,如果01111111二进制书中的第一位是1,则会报错
* @param b
* @return
*/
public static byte[] bytesStringToBytes(String b){
if(b.length()<0){
return null;
}
String[] in = b.split(",");
byte[] by = new byte[in.length];
for (int i = 0; i < in.length; i++) {
by[i] = Byte.parseByte(in[i],2);
}
return by;
}
/**
* 二进制字符串,转十六进制字符串,中间要用逗号隔开
* 只能处理无符号的数值
* 例如:00111011,01111111都可以处理,如果01111111二进制书中的第一位是1,则会报错
*/
public static String bytesStringToHexString(String byteString){
if(byteString.length()<0){
return null;
}
String[] inputs = byteString.split(",");
StringBuffer sb = new StringBuffer();
for (int i = 0; i < inputs.length; i++) {
byte[] b = new byte[1];
b[0] = Byte.parseByte(inputs[i],2);
sb.append(BytesUtils.bytesToHexString(b));
}
return sb.toString();
}
/**
* 二进制数组转二进制字符串
* @param b
* @return
*/
public static String bytesToBytesString(byte[] b){
StringBuffer sb = new StringBuffer();
String s ="";
for(byte bs:b){
String sj = Integer.toBinaryString(bs);
s += sj;
int i = sj.length();
if (i<8) { //8位不够,前面补零操作
int in = 8-i;
s = addZeroHead(s,in);
sb.append(s);
s="";
}
}
return sb.toString();
}
/**
* 前补零操作
* 二进制字符串中,不够八位
* @return
*/
public static String addZeroHead(String src,int addZero){
String sr = src;
String s = "";
for(int f=0;f<addZero;f++){
s += "0";
}
return sr = s+sr;
}
/**
* 二进制数组转十六进制字符串<br/>
* @param b
* @return String
*/
public static String bytesToHexString(byte[] b){
if(b==null){
return null;
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String strHex=Integer.toHexString(b[i]);
if(strHex.length() > 3){
sb.append(strHex.substring(6));
} else {
if(strHex.length() < 2){
sb.append("0" + strHex);
} else {
sb.append(strHex);
}
}
}
return sb.toString();
}
/**
* 二进制字符串,转十六进制字符串
* 只能处理无符号的数值
* 例如:00111011,01111111都可以处理,如果01111111二进制书中的第一位是1,则会报错
*/
public static String hexStringToBytesString(String hexString){
if(hexString.length()<0){
return null;
}
String[] inputs = hexString.split(",");
StringBuffer sb = new StringBuffer();
for (int i = 0; i < inputs.length; i++) {
byte[] b = new byte[1];
b[0] = Byte.parseByte(inputs[i],2);
sb.append(BytesUtils.bytesToHexString(b));
}
return sb.toString();
}
/**
* 十六进制字符串转二进制数组<br/>
* @param s
* @return
*/
public static byte[] hexStringToBytes(String s){
if (s == null || s.equals("")) {
return null;
}
s = s.toUpperCase();
int length = s.length() / 2;
char[] hexChars = s.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}
/**
* 字符转为byte<br/>
* 把一个字符转成二进制<br/>
* @param c
* @return
*/
private static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}
/**
* int to bytes<br/>
* 十进制转二进制数组;产生的数据在高<br/>
* @param i
* @return
*/
public static byte[] intToBytes(int i) {
byte[] b = new byte[4];
b[0] = (byte) (0xff & i);
b[1] = (byte) ((0xff00 & i) >> 8);
b[2] = (byte) ((0xff0000 & i) >> 16);
b[3] = (byte) ((0xff000000 & i) >> 24);
return b;
}
/**
* bytes to int ;产生的int数据在高位<br/>
* 二进制数组转十进制,数组必须大于4,小于4会出错<br/>
* @param b
* @return
*/
public static int bytesToInt(byte[] b) {
if(b.length<4){
return 0;
}
int n = b[0] & 0xFF;
n |= ((b[1] << 8) & 0xFF00);
n |= ((b[2] << 16) & 0xFF0000);
n |= ((b[3] << 24) & 0xFF000000);
return n;
}
/**
* 合并两个byte数组 <br/>
* @param src 合并在前
* @param des 合并在后
* @return
*/
public static byte[] getMergeBytes(byte[] src, byte[] des){
int ac = src.length;
int bc = des.length;
byte[] b = new byte[ac + bc];
for(int i=0;i<ac;i++){
b[i] = src[i];
}
for(int i=0;i<bc;i++){
b[ac + i] = des[i];
}
return b;
}
/**
* 合并三个byte数组 <br/>
* @param src 合并前
* @param cen 合并中
* @param des 合并后
* @return 字节数组
*/
public static byte[] getMergeBytes(byte[] src, byte[] cen, byte[] des){
int ac = src.length;
int bc = cen.length;
int cc = des.length;
byte[] b = new byte[ac + bc + cc];
for(int i=0;i<ac;i++){
b[i] = src[i];
}
for(int i=0;i<bc;i++){
b[ac + i] = cen[i];
}
for(int i=0;i<cc;i++){
b[ac + bc + i] = des[i];
}
return b;
}
/**
* 5个byte合并<br/>
* @param a
* @param b
* @param c
* @param d
* @param e
* @return
*/
public static byte[] getMergeBytesFive(byte[] a, byte[] b , byte[] c , byte[] d , byte[] e){
int ia = a.length;
int ib = b.length;
int ic = c.length;
int id = d.length;
int ie = e.length;
byte[] arrs = new byte[ia+ib+ic];
arrs = getMergeBytes(a, b, c);
byte[] twoArr = new byte[id+ie];
twoArr = getMergeBytes(d, e);
byte[] bs = new byte[ia+ib+ic+id+ie];
bs = getMergeBytes(arrs, twoArr);
return bs;
}
}
分享到:
相关推荐
### hex2byte与byte2hex知识点详解 在计算机科学领域,数据经常需要在不同的格式之间进行转换,以适应各种应用场景的需求。例如,在网络通信、文件存储等场景中,经常需要将二进制数据(通常表示为`byte`数组)转换...
在Java或类似的编程语言中,我们经常会遇到需要将字符串(String)与字节数组(Byte[])以及十六进制表示的字符串(Hex)进行相互转换的情况。这些转换在处理网络通信、文件存储、加密解密等领域尤为关键。下面我们...
- 数据域:m bytes (通常为空) - CRC 校验域:2 bytes #### 2. 读寄存器命令(03hex) 用于读取特定寄存器中的数据值。数据帧格式如下: - 起始符:FE hex - 地址域:n bytes - 功能码:03 hex - 寄存器地址:2 ...
public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { // 将字节转换为16进制的两个字符 int halfByte = (b & 0xF0) >> 4; int byteVal = (b & ...
浮点数转换为四字节数HexToByte是计算机编程中的一个重要操作,特别是在处理二进制数据、网络传输或存储时。浮点数是一种用于表示数值的格式,它包括正负号、指数和尾数部分,能够精确表示大部分实数。在计算机内部...
- Byte count:2xN*(Hex),1 Byte。 - Input Registers:N*x2 Bytes。 - Error Check:0000~ffff(Hex),2 Bytes。 - **错误响应命令格式**: - Slave Address:00~ff(Hex),1 Byte。 - Error code:84(Hex),1 ...
- **使用`hex`包**:Go的标准库`encoding/hex`提供了将16进制字符串解码为字节切片(byte slice)的函数,即`Unhex`。这个函数接收一个16进制字符串,返回对应的byte数组。 - **手动转换**:通过遍历16进制字符串...
Java中byte[]、String、Hex字符串等转换的方法 Java中byte[]、String、Hex字符串等转换的方法是非常重要的知识点,这些转换方法在实际开发中经常被使用。下面将详细介绍这些转换方法。 byte[]和byte的合并 在Java...
abytData : 字节数组 asp里请加()号 如: bytes="" md5_byte((bytes),0,0) 可选参数 iStart iEnd 默认为0,取整个 bytes的hash值 ---------------------------------------------------- [可选] iStart: 起始位置 ...
bytes[i / 2] = HexToByte(hex); j = j + 2; } return bytes; } private static byte HexToByte(string hex) { return Convert.ToByte(hex, 16); } ``` 这个函数会去除非16进制字符,并将剩余的16进制字符串...
byte[] bytes = new byte[hexBytes.Length]; for (int i = 0; i ; i++) { bytes[i] = Convert.ToByte(hexBytes[i], 16); } // 合并字节数组 data = ConcatenateArrays(data, bytes); } // 创建并写入Bin...
-p [value] Pad-byte value in hex (default: ff) -r [start] [end] Range to compute checksum over (default is min and max addresses) -s [address] Starting address in hex for binary file (default: ...
XVI32 is a free hex-editor with the following main features: - New: Runs on systems with > 2 GB virtual memory - New: Bugfix (script command CHARCON is now working) - Simplified search for Unicode ...
public static String byteToHex(byte[] bytes) { return new String(bytes, StandardCharsets.UTF_8); } ``` ### 二、`String` 转 `byte[]` 将字符串转换为字节数组,可以使用`getBytes()`方法,同样需要指定...
byte[] bytes = File.ReadAllBytes(hexFilePath); StringBuilder sb = new StringBuilder(); for (int i = 0; i < bytes.Length; i++) sb.Append(bytes[i].ToString("X2")); return sb.ToString(); } ``` 这个...
为什么需要本文,因为在对接某些很老的接口的时候,需要传递过去的是16进制的hex字符串,并且要求对传的字符串做编码,这里就介绍了utf-8 Unicode bytes 等等。 #英文使用utf-8 转换成16进制hex字符串的方法 newstr...
' number of bytes actually written, except when the file is opened with ' FILE_FLAG_OVERLAPPED. If the file handle was created for overlapped ' input and output (I/O), the application must adjust the ...
bytes[i] = HexToByte(hex); } return bytes; } private static byte HexToByte(string hex) { return Convert.ToByte(hex, 16); } ``` 这些方法在处理字符串与字节数组的转换时非常实用。理解并熟练掌握这些...
byte[] bytes = hexStringToBytes(hexString); return bytes; } ``` 这里首先将长整型的无符号值转换为16进制字符串,然后将其转换为字节数组。字符串的长度需要补零以确保至少8个字符,对应4字节的无符号整数。 ...
byte[] bytes = new byte[hex.Length / 2]; for (int i = 0; i < bytes.Length; i++) { try { bytes[i] = byte.Parse(hex.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber); } catch {...