首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将整数转换为浓缩的二进制等价物,例如MySQL中的二进制(3)

问如何将整数转换为浓缩的二进制等价物,例如MySQL中的二进制(3)
EN

Stack Overflow用户
提问于 2019-10-29 16:15:45
回答 1查看 719关注 0票数 0

我正在执行散列操作,并且需要一致、准确、高效地追加原始字节等等。

我不能乱搞ASCII编码的数字字符串,我只需要得到原始字节。

MySQL的转换函数非常令人困惑,而且不会产生像我这样的Server人员认为很明显的结果。

例如,BINARY 123456生成一个带有6个字符的ASCII编码字符串,而不是看似明显的BINARY ( 3 )字符串00000001 11100010 01000000 (又名0x01E240 )。

到目前为止,获得正确转换的唯一方法是分配十六进制文本--这在运行时显然是不切实际的。

代码语言:javascript
复制
SET @int_value = 123456 ;   -- Decimal value

SET @hex_value = 0x01E240 ; -- The same value, in hexadecimal,
                            -- 6 hex digits = 3 bytes

SELECT LENGTH ( BINARY @int_value ) , LENGTH ( BINARY @hex_value ) , LENGTH ( BINARY HEX ( @int_value ) ) ;

​

​

因此,在本例中,如何将整数值(例如,DECLARE'd整数变量或整数列) 123456转换为3个字节的字符串?

编辑:

按照注释中的请求,Server在默认情况下生成所需的结果:

​

​

这就是我需要在MySQL中模仿的行为。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-01 10:38:11

可以使用六角()生成具有整数十六进制表示形式的字符串。然后UNHEX()将该字符串转换为二进制值:

代码语言:javascript
复制
SET @int_value = 123456;   -- Decimal value

SET @bin_value = UNHEX(HEX(@int_value));

SELECT @int_value, HEX(@bin_value), LENGTH(@bin_value);

结果:

代码语言:javascript
复制
@int_value | HEX(@bin_value) | LENGTH(@bin_value)
-----------|-----------------|-------------------
    123456 |          01E240 |                  3

请参阅demo on db<>fiddle

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58611436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档