You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于纯SQLite实现字符串与二进制的双向转换?

SQLite纯SQL实现字符串与二进制互转方案

我来补全这个纯SQLite实现的字符串与二进制互转方案,全程不用任何外部函数,纯CTE递归搞定:

一、字符串转二进制(8位补全格式)

下面是完整的SQL代码,支持任意ASCII范围内的字符串转换,输出是空格分隔的8位二进制串:

-- 字符串转二进制(8位补全,空格分隔)
WITH string(s) AS (VALUES('Hello, SQLite!')), -- 替换成你要转换的字符串
bytes(i, byte_val) AS (
  -- 递归提取每个字符的Unicode编码
  SELECT 1, UNICODE(SUBSTR(s, 1, 1)) FROM string
  UNION ALL
  SELECT i + 1, UNICODE(SUBSTR(s, i + 1, 1)) FROM bytes
  WHERE i < (SELECT LENGTH(s) FROM string)
),
binary_bits(bit_pos, bit_str, current_byte) AS (
  -- 递归把每个字节拆解为8位二进制(从高位到低位)
  SELECT 7, '', byte_val FROM bytes
  UNION ALL
  SELECT 
    bit_pos - 1, 
    bit_str || ((current_byte >> bit_pos) & 1), 
    current_byte 
  FROM binary_bits
  WHERE bit_pos >= 0
)
-- 拼接所有8位二进制串,用空格分隔
SELECT GROUP_CONCAT(bit_str, ' ') AS binary_representation
FROM binary_bits
WHERE bit_pos = 0; -- 只取每个字节拆解完成的结果

逻辑说明:

  • string CTE:用来存放要转换的目标字符串,直接修改VALUES里的内容即可。
  • bytes CTE:通过递归逐个提取字符串中每个字符的Unicode十进制值,相当于把字符串拆成单个字节。
  • binary_bits CTE:对每个字节做位运算,从第7位(最高位)到第0位(最低位)依次提取每一位的值,拼接成8位的二进制字符串。
  • 最后用GROUP_CONCAT把所有8位二进制串用空格分隔,得到最终的二进制表示。

二、二进制转字符串(空格分隔的8位输入)

如果要把二进制串转回原字符串,用下面的代码,输入要求是空格分隔的8位二进制片段:

-- 二进制转字符串(输入为空格分隔的8位二进制串)
WITH binary_input(bin_str) AS (VALUES('01001000 01100101 01101100 01101100 01101111 00101100 00100000 01010011 01110001 01101000 01101000 01101100 01101001 01110100 00100001')), -- 替换成你的二进制串
split_bits(bit_segment, remaining_str) AS (
  -- 递归拆分空格分隔的每个8位二进制段
  SELECT SUBSTR(bin_str, 1, 8), SUBSTR(bin_str, 10) FROM binary_input
  UNION ALL
  SELECT SUBSTR(remaining_str, 1, 8), SUBSTR(remaining_str, 10) FROM split_bits
  WHERE remaining_str != ''
),
byte_values(byte_dec) AS (
  -- 把二进制字符串转成十进制字节值
  SELECT CAST(bit_segment AS INTEGER, 2) FROM split_bits
)
-- 把每个十进制值转成字符并拼接
SELECT GROUP_CONCAT(CHAR(byte_dec), '') AS original_string
FROM byte_values;

逻辑说明:

  • binary_input CTE:存放要转换的二进制串,注意格式必须是空格分隔的8位片段。
  • split_bits CTE:通过递归拆分字符串,把每个8位的二进制段单独提取出来。
  • byte_values CTE:用CAST(..., 2)把二进制字符串转换成十进制的字节值。
  • 最后用CHAR()把每个十进制值转回字符,再用GROUP_CONCAT拼接成原字符串。

内容的提问来源于stack exchange,提问作者user9171470

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:06:01