大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说字符串数字转16进制_二进制与十六进制如何进行转化,希望您对编程的造诣更进一步.
本文分享自华为云社区《GaussDB(DWS)字符串、二进制、十六进制互转》,作者:你是猴子请来的救兵吗 。
概述
现网中遇到很多小伙伴不清楚字符串与进制之间的转换方法,其实在GaussDB(DWS)中,进制转换是非常方便的。这次就来对不同的场景一一进行解析,整理出来供大家翻阅参考。
字符串&二进制 互转
# 字符串转二进制,使用类型转换 select bytea("华为"::text); select "华为"::text::bytea; select cast("华为"::text as bytea); bytea ---------------- xe58d8ee4b8ba (1 row) # 二进制转字符串,使用convert_from,第二个参数为编码 select convert_from("xe58d8ee4b8ba"::bytea,"utf8"); convert_from -------------- 华为 (1 row)
二进制&十六进制 互转
# 二进制转十六进制,可以使用encode, select encode("xe58d8ee4b8ba"::bytea,"hex"); hex -------------- e58d8ee4b8ba (1 row) # 十六进制转二进制,820版本可以使用unhex,低于820版本可以使用decode select unhex("e58d8ee4b8ba"::text); unhex ---------------- xe58d8ee4b8ba (1 row) select decode("e58d8ee4b8ba"::text,"hex"); decode ---------------- xe58d8ee4b8ba (1 row)
字符串&十六进制 互转
# 字符串转十六进制,820版本可以使用hex,低于820版本可以使用encode select hex("华为"::text); hex -------------- E58D8EE4B8BA (1 row) select encode("华为"::text::bytea, "hex"); encode -------------- e58d8ee4b8ba (1 row) # 十六进制转字符串,需先将十六进制转换为二进制,再转为字符串 select convert_from(unhex("E58D8EE4B8BA"),"utf8"); convert_from -------------- 华为 (1 row)
注意事项:
1,hex/unhex是820版本新增的一组十六进制的编码/解码函数,低于820版本需使用encode/decode函数替代。
hex行为与mysql数据库保持一致,输出全大写的十六进制字符串;encode输出的是全小写的十六进制字符串;对大小写有要求的小伙伴可以选择满足要求的函数,但实际在解析时是没有影响的。
select hex("华为"::text); hex -------------- E58D8EE4B8BA (1 row) select encode("华为"::text::bytea, "hex"); encode -------------- e58d8ee4b8ba (1 row)
2,在将二进制转为字符串的时候使用convert_from,第二个参数为源数据编码。
需要注意的是,一定保证源数据编码正确,否则就会产生非预期的结果,甚至报错。
像这样
# 源数据编码为utf8,但解析时错误指定为gbk select convert_from(unhex("E58D8EE4B8BA"),"gbk"); convert_from -------------- 鍗庝负 (1 row)
这样
# 源数据编码为gbk,但解析时错误指定为utf8 select convert_from(unhex("bbaaceaa"),"utf8"); ERROR: invalid byte sequence for encoding "UTF8": 0xbb CONTEXT: referenced column: convert_from
知识小结
转换函数encode
encode(data bytea, format text) 描述:将二进制数据编码为文本数据。 返回值类型:text SELECT encode("database", "base64"); encode ---------- ZGF0YWJhc2U= (1 row) decode(string text, format text) 描述:将二进制数据从文本数据中解码。 返回值类型:bytea SELECT decode("ZGF0YWJhc2U=", "base64"); decode -------------- x6461746162617365 (1 row)
转换函数convert_from
convert_from(string bytea, src_encoding name) 描述:以数据库的编码方式转化字符串bytea。 src_encoding指定源编码方式,在该编码下,string必须是合法的。 返回值类型:text SELECT convert_from("x6461746162617365","gbk"); convert_from -------------- database (1 row)
转换函数hex/unhex,需820或以上版本
hex(n) 描述:n可以是int类型也可以是字符串。返回n的十六进制字符串。若参数含有NULL值,返回NULL。 返回值类型:text SELECT hex("abc") as result; result -------- 616263 (1 row) unhex(n) 描述:执行hex(n)的反向操作,n可以是int类型也可以是字符串,将参数中的每一对十六进制数字理解为一个数字,并将其转化为该数字代表的字符。若参数含有NULL值,返回NULL。 返回值类型:bytea SELECT unhex("616263") as result; result ---------- x616263 (1 row)
点击关注,第一时间了解华为云新鲜技术~
原文地址:https://www.cnblogs.com/huaweiyun/archive/2022/12/08/16965660.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4447.html