HBase shell 中的十六进制数值表示

Posted DrWong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase shell 中的十六进制数值表示相关的知识,希望对你有一定的参考价值。

在使用Hbase shell 进行get 或scan操作时,时不时会看到一些数值被转成了16进制, 就像下面那样

value=W\\x5C5\\x80

那么这个值具体等于多少? 查阅资料后发现算法如下

W -> W的ASCII码16进制 为 0x57

\\x5C -> 就是16进制不变 0x5C

5 -> 5的ASCII码16进制 为 0x35

\\x80 -> 就是16进制不变 0x80

所以从左往右重新拼起来就是

0x575C3580 -> 转成十进制为  1465660800

 

所以照例,如下

value=W]PA

W -> W的ASCII码16进制 为 0x57

] -> ]的ASCII码16进制 为 0x5D

P -> P的ASCII码16进制 为 0x50

A -> A的ASCII码16进制 为 0x41

0x575D5041 -> 转成十进制为  1465733185

 


 

 

以上是查询结果出现十六进制的情况, 那么如果查询的Key本身也被转为16进制怎么办? 因为有时候key中可能有中文字符.

可以照如下操作:

先写个简单测试程序把中文UTF-8转成16进制

System.out.println(org.apache.commons.codec.binary.Hex.encodeHex("中文".getBytes("UTF-8")));
//输出结果:e4b8ade69687

System.out.println(new String(org.apache.commons.codec.binary.Hex.decodeHex("e4b8ade69687".toCharArray()),"UTF-8"));
//输出结果:中文

也可以直接使用网站工具

https://sites.google.com/site/nathanlexwww/tools/utf8-convert

转好后把16进制每2位一组前面加上\\x

就比如上面的

e4b8ade69687 -> \\xe4\\xb8\\xad\\xe6\\x96\\x87 

 

举个例子: 

我要查询的key是

CE20CCE09EEB4F8A6BB50E41953A55FCD|3|钢铁烈阳37|PA-1453442402-6111|PR-1453442402-3599

直接

get \'role_history_info\' , \'CE20CCE09EEB4F8A6BB50E41953A55FCD|3|钢铁烈阳37|PA-1453442402-6111|PR-1453442402-3599\'

没有结果

把其中的中文字符按照上面的方法转成如下

钢铁烈阳->e992a2e99381e78388e998b3 -> \\xe9\\x92\\xa2\\xe9\\x93\\x81\\xe7\\x83\\x88\\xe9\\x98\\xb3

查询时 包着key的单引号换成双引号

get \'role_history_info\' , "CE20CCE09EEB4F8A6BB50E41953A55FCD|3|\\xe9\\x92\\xa2\\xe9\\x93\\x81\\xe7\\x83\\x88\\xe9\\x98\\xb337|PA-1453442402-6111|PR-1453442402-3599"

 

查出来啦...

 

以上是关于HBase shell 中的十六进制数值表示的主要内容,如果未能解决你的问题,请参考以下文章

vscode中的颜色代码怎样记忆最有效

shell脚本之使用bc工具实现数值转换(浮点转二进制)

java中的浮点数

0x000000 16进制颜色代码第一个0表示啥意思,为啥要0x后面的颜色代码呢?

Visual Studio调试器 - 在二进制中显示整数值

为什么要在JSON中使用字符串来表示十进制数