例如,如果想要截取字节数组 01 03 00 01 00 00 14 0A 的第 5 和第 6 位数据,则可以使用以下代码:
byte[] input = {0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x14, 0x0A}; // 截取第 5 和第 6 位数据 byte[] output = Arrays.copyOfRange(input, 4, 6); System.out.println(Arrays.toString(output));
输出结果将是:
请注意,在这种情况下,我们使用了 Arrays.copyOfRange(byte[], int, int) 方法来截取字节数组的一部分。第一个参数是输入字节数组,第二个参数是要从字节数组开始复制的索引,第三个参数是要复制的元素数。
此外,还可以使用 Arrays.toString(byte[]) 方法将字节数组转换为可打印的字符串,以便轻松查看结果。
127转16进制 java
在 Java 中,可以使用 Integer 类的 toHexString(int) 方法将整数转换为 16 进制字符串。
例如,如果想将整数 127 转换为 16 进制字符串,则可以使用以下代码:
int num = 127; String hexString = Integer.toHexString(num); System.out.println(hexString);
输出结果将是:
请注意,这是无符号 16 进制字符串。如果要将数字转换为有符号 16 进制字符串,则可以使用以下代码:
输出结果仍然是 `
0xFF如何装入byte数组 java
在 Java 中,可以使用两种方法将数字 0xFF 装入字节数组。
首先,可以使用位运算符将数字强制转换为字节,然后将其装入字节数组。例如:
byte[] array = new byte[1]; array[0] = (byte) 0xFF;
其次,可以使用 ByteBuffer 类的 put(byte) 方法将数字装入字节数组。例如:
在这两种情况下,字节数组中的值都将是 0xFF。
请注意,在使用位运算符转换数字时,需要注意数据范围。如果数字超出了字节的范围(即 -128 到 127),如果将数字 0xFF 转换为字节,则结果将是 -1。
这是因为字节数据类型只能表示整数范围为 -128 到 127 的值。由于 0xFF 在此范围之外,因此在转换为字节时将被截断。在使用位运算符进行强制转换时,将使用二进制补码来表示超出范围的数字,从而导致结果为 -1。
例如,0xFF 的二进制表示为 1111 1111。在将其转换为字节时,将使用二进制补码表示,即 1111 1111 附加一个符号位 1。
那怎么办?
如果想要将数字 0xFF 装入字节数组,并且希望结果为 0xFF 而不是 -1,则可以使用两种方法。
首先,可以使用 Byte.toUnsignedInt(byte) 方法将字节转换为无符号整数。例如:
byte b = (byte) 0xFF; int i = Byte.toUnsignedInt(b); System.out.println(i); // 输出 255
其次,可以使用 ByteBuffer 类的 getInt() 方法将字节装入整数。例如:
在这两种情况下,输出结果都是 255。
请注意,如果将数字 0xFF 直接装入字节数组,则结果将是 -1。这是因为字节数据类型只能表示整数范围为 -128 到 127 的值。如果需要表示超出此范围的值,则必
可以使用 Integer 类的 toBinaryString(int) 方法将整数 255 转换为二进制字符串。例如:
int num = 255; String binaryString = Integer.toBinaryString(num); System.out.println(binaryString);
输出结果将是:
请注意,这是无符号二进制字符串。如果要将数字转换为有符号二进制字符串,则可以使用以下代码:
输出结果仍然是 11111111。
请注意,在使用 String.format() 方法时,我们在二进制字符串前添加了 32 个空格,并使用 replace() 方法将其替换为 0。这样,就可以确保二进制字符串总是 32 位长,并且在必要时使用前导 0 补足字符串。
工具类
public static int[] getBinaryData(String hexString){ int decimal = Integer.parseInt(hexString, 16); // 16进制转10进制 String binaryString = Integer.toBinaryString(decimal); // 10进制转2进制 int len = 16; int length = binaryString.length(); if(length < len) { binaryString = String.format("%0"+(len-length)+"d%s",0, binaryString); } char[] chars = binaryString.toCharArray(); int[] array = new int[chars.length]; for (int i = 0; i < chars.length; i++) { array[i] = Integer.parseInt(String.valueOf(chars[i]), 2); } return array; } public static int[] getBinaryData(byte d1, byte d2){ // byte[] input = {0x01, 0x03, 0x00, 0x01, (byte) 0xFF, (byte) 0x7F, 0x14, 0x0A}; int d1ToUnsignedInt = Byte.toUnsignedInt(d1); int d2ToUnsignedInt = Byte.toUnsignedInt(d2); String d1BinaryString = String.format("%32s", Integer.toBinaryString(d1ToUnsignedInt)).replace(' ', '0'); String d1Binary8bitString = d1BinaryString.substring(d1BinaryString.length() - 8); String d2BinaryString = String.format("%32s", Integer.toBinaryString(d2ToUnsignedInt)).replace(' ', '0'); String d2Binary8bitString = d2BinaryString.substring(d2BinaryString.length() - 8); String date = d1Binary8bitString + d2Binary8bitString; // System.out.println("0XFF 0X7F的二进制:"+date); char[] chars = date.toCharArray(); int[] array = new int[chars.length]; for (int i = 0; i < chars.length; i++) { array[i] = Integer.parseInt(String.valueOf(chars[i]), 2); } System.out.println("0XFF 0X7F的int数组数据:"+ Arrays.toString(array)); return array; }
object CRC16Utils { fun addZeroForNum(str: String, strLength: Int): String? { var str = str var strLen = str.length var sb: StringBuffer while (strLen < strLength) { sb = StringBuffer() sb.append(str).append(" ") str = sb.toString() strLen = str.length } return str } fun stringToAscii(`val`: String): String? { val stringBuffer = StringBuffer() val chars = `val`.toCharArray() for (i in chars.indices) { stringBuffer.append(chars[i].code) } return stringBuffer.toString() } fun byteToInteger(b: Byte): Int { val value: Int value = b.toInt() and 0xff return value } fun CRC_A001(Buf: ByteArray): Int { var CRC: Int var i: Int var Temp: Int val Len: Int CRC = 0xffff Len = Buf.size i = 0 while (i < Len) { CRC = CRC xor byteToInteger(Buf[i]) Temp = 0 while (Temp < 8) { CRC = if (CRC and 0x01 == 1) CRC shr 1 xor 0xA001 else CRC shr 1 Temp++ } i++ } return CRC and 0xff } }
CRC计算工具
通过这个工具了解到 CRC算法挺多种的 , 千万别搞混了 , 如果验证计算结果 可以通过该工具。