将 byte[] 数组从 MySQL 转换为带破折号的十六进制 java?
convert byte[] array from MySQL into hex with dashes in java?
我正在寻找一个 JavaUtil class 如果已经可以将 byte[] 数组转换为 hexString with dashes。我环顾四周找不到此类问题。
这是我的场景:
Byte[] 数组存储在 MySQL 中,如 here 所述。
所以当我 运行
select HEX(id) as hexi, (
insert(
insert(
insert(
insert(
hex(
concat(substr(id,5,4),substr(id,3,2),
substr(id,1,2),substr(id,9,8))
),
9,0,'-'),
14,0,'-'),
19,0,'-'),
24,0,'-')
) as hex_dashes from my_table;
我明白了
hexi hex_dashes
22E179345A5C11E69A64F9BBBC7C3AAC 5A5C11E6-7934-22E1-9A64-F9BBBC7C3AAC
你可以很快注意到hex_dashes是hexi字符串的重新排列版本(在hex_dashes中第二个破折号后寻找22E1是hexi的起始字符串。如何进行这种重新排列在上面链接的文章)。
在上面的查询中,id类型是byte[]
。
现在,我想要一个 java Util 函数来 return hex_dashes 给定 byte[] 数组的字符串。
我有这个方法 returns hexi 而不是 hex_string。
static final String HEXES = "0123456789ABCDEF";
public static String byteArrayToHexString( byte [] raw ) {
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();
}
我想知道是否有什么方法可以用破折号得到十六进制。
谢谢
您可以使用以下实用程序方法:
static String hexDashes(byte[] raw) {
final String hex = byteArrayToHexString(raw);
return String.format("%s-%s-%s-%s-%s", hex.substring(8, 16), hex.substring(4, 8), hex.substring(0, 4), hex.substring(16, 20), hex.substring(20, 32));
}
它采用原始 byte[]
,将其转换为十六进制,并仅在破折号之间插入计算字符串中的相应子字符串。如果您已经为先前的使用计算了十六进制字符串,那么将其用作参数 hex
会更快。您也可以使用字符串连接而不是 String.format(...)
.
我正在寻找一个 JavaUtil class 如果已经可以将 byte[] 数组转换为 hexString with dashes。我环顾四周找不到此类问题。
这是我的场景:
Byte[] 数组存储在 MySQL 中,如 here 所述。
所以当我 运行
select HEX(id) as hexi, (
insert(
insert(
insert(
insert(
hex(
concat(substr(id,5,4),substr(id,3,2),
substr(id,1,2),substr(id,9,8))
),
9,0,'-'),
14,0,'-'),
19,0,'-'),
24,0,'-')
) as hex_dashes from my_table;
我明白了
hexi hex_dashes
22E179345A5C11E69A64F9BBBC7C3AAC 5A5C11E6-7934-22E1-9A64-F9BBBC7C3AAC
你可以很快注意到hex_dashes是hexi字符串的重新排列版本(在hex_dashes中第二个破折号后寻找22E1是hexi的起始字符串。如何进行这种重新排列在上面链接的文章)。
在上面的查询中,id类型是byte[]
。
现在,我想要一个 java Util 函数来 return hex_dashes 给定 byte[] 数组的字符串。
我有这个方法 returns hexi 而不是 hex_string。
static final String HEXES = "0123456789ABCDEF";
public static String byteArrayToHexString( byte [] raw ) {
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();
}
我想知道是否有什么方法可以用破折号得到十六进制。
谢谢
您可以使用以下实用程序方法:
static String hexDashes(byte[] raw) {
final String hex = byteArrayToHexString(raw);
return String.format("%s-%s-%s-%s-%s", hex.substring(8, 16), hex.substring(4, 8), hex.substring(0, 4), hex.substring(16, 20), hex.substring(20, 32));
}
它采用原始 byte[]
,将其转换为十六进制,并仅在破折号之间插入计算字符串中的相应子字符串。如果您已经为先前的使用计算了十六进制字符串,那么将其用作参数 hex
会更快。您也可以使用字符串连接而不是 String.format(...)
.