在剖析该问题前请看如下代码
public static String bytes2HexString(byte[] b) {
String
ret = "";
for (int i = 0; i < b.length; i++) {
String hex =
Integer.toHexString(b[ i ] & 0xFF);
if (hex.length() == 1) {
hex = '0'
+ hex;
}
ret += hex.toUpperCase();
}
return
ret;
}
上面是将byte[]转化十六进制的字符串,注意这里b[ i ] & 0xFF将一个byte和
0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出
b[ i ] &
0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i
]);,将byte强转为int不行吗?答案是不行的.
其原因在于:
1.byte的大小为8bits而int的大小为32bits
2.java的二进制采用的是补码形式
在这里先温习下计算机基础理论
byte是一个字节保存的,有8个位,即8个0、1。
8位的第一个位是符号位,
也就是说0000 0001代表的是数字1
1000
0000代表的就是-1
所以正数最大位0111 1111,也就是数字127
负数最大为1111 1111,也就是数字-128
上面说的是二进制原码,但是在java中采用的是补码的形式,下面介绍下什么是补码
分享到:
相关推荐
byte数组、十进制、十六进制间的两两转换
加载到应用程序,运行时打开 w_test1 窗口就可以了 -----------------------... byte转2位十六进制 5.十进制数 十进制转二进制 十进制转十六进制 6.十六进制 十六进制转二进制 2位十六进制转byte 十六进制转十进制
利用QT/C++实现的三种方法进行十六进制与浮点数相互转化:直接方法、强制转化法和union与struct转化法,经验证有效,并附带源码。
java socket处理硬件传过来的16进制数据的工具类,包含大小端转换、byte[]数组转换为16进制的字符串、byte[]转ByteBuffer、16进制字符串转换为byte数组等
Arduino-十六进制-十进制转换用于在 Arduino 上在十六进制字符串和十进制数之间转换值的实用函数。 (有助于颜色转换)。 在 MIT 许可下许可用于任何用途。
labview 读取的一维数组(整数)转换成16进制的字符串,方便大家进行数据处理。有问题可以留言咨询,互相学习
byte型转换十六进制字符串 /** * byte型转换十六进制 * @param b * @returns {string} * @constructor */ const Bytes2HexString = (b)=> { let hexs = ; for (let i = 0; i < b.length; i++) { let hex...
PB关于字符进制数转化及base64加密、解密 1、字符型十六进制数转为十进制数值 2、十进制数转为十六进制字符 3、base64加密 4、base64解密 5、将blob转为byte数组
1.真实代码,节省你大量时间 2.pb11.2版本 一份劳动一份收获
可以获取textEdit上的QString类型16进制数转换为ByteArray; 输入数据错误判断及提示; CRC16校验计算公式; 计算ByteArray的crc16结果; 结果转换为QString,并且每两位数据都需要增加空格展示; 输入清除功能; ...
这是我为朋友编写的一个(非常)小的Delphi应用程序,目的是演示十六进制到转换。 他的工作有一个,背面带有Modbus串行端口。 他们能够像这样以CSV格式从仪表中提取数据(请注意,日期采用的是Buddhsit Era(BE)...
二进制字符串转换成十六进制字符串,并返回byte数组 把16进制字符串转换成字节数组 把字节数组转换成16进制字符串 十六进制字符串转二进制字符串 二进制转十进制数 将数字(十进制)串转换为固定位数的二进制字符...
DAT数据格式 5A 5A 5A 5A xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ( 帧头 ) 帧头后面依次为第一块AD通道1数据(2 byte),第二块AD通道1数据(2 byte),第一块AD通道2数据(2 ...
我们看到的加密后的摘要是十六进制的,而类返回给我们的是byte数组,我们需要byte[]转换成十六进制字符串。具体方法是:用HexBinaryAdapter类,他有一个marshal(byte[] bytes)方法,他可以将byte[]转换为String。 ...
该软件可以将单精度(single)浮点数或双精度(double)浮点数转换成二进制、十进制、十六进制字节内码表示,也可以将字节内码转换成浮点进行逆变换。不到1M的数据量,精简而不失实用性。全免费,无需注册,解压即...
第一章 C语言基本知识 【考点1】C程序 用C语言编写的程序称为C语言源程序,源程序...二进制、八进制、十六进制转化为十进制采用乘法,十进制转化为二进制、八进制、十六进制采用除法。数据的存放位置就是它的地址。
在公司做项目的时候发现用Netty进行TCP/IP通信的Netty客户端接收到的数据进制乱码,经过摸索,终于成功解决了这个鸡肋的问题
解析的时候,往往是一个字节(Byte)占用8个位(bit),高位4bit 表示一个十六进制数据,低位4bit 表示一个十六进制数据。 问题描述:在SQL Server 数据库中,如何实现二进制数据与字符串数据之间的直接转换? 一定...
所以从二进制里面派生出了八进制(0 1 2 3 4 5 6 7)和十六进制(0 1 2 3 4 5 6 7 8 9 A B C D E F),每三位二进制数可以转换为一位八进制,每四位二进制可以转换为一位十六进制。怎样互换这些不同的进制数值是个...