如何将表示postgresql中的HEX八位字节的字符串转换为二进制?

问题描述 投票:1回答:1

我在postgresql中有一个用mac地址存储的mac地址。我需要在有关I / G位和U / L位(qazxsw poi)的信息中转换第一个八位字节。

示例:mac地址是more infos。第一个八重奏是AA-BB-CC-DD-EE-FF。转换为二进制:AA。最后一位代表I / G:0。从右到左的第二位是U / L位:1。

我怎样才能在postgresql查询中执行此操作?

这是我到目前为止:

0101 01010

回报是:

select id, mac, left(mac::text,2) as octet 
from mytable

我也试过id,mac,octet 13,aa:XX:XX:XX:XX:XX,aa ,但我收到错误消息left(mac::text,2)::integer as integer

我想要的结果如下:

[22P02] ERROR: invalid input syntax for integer: "aa"

所以我已经隔离了第一位,但是,格式是'text',我无法将其转换为整数或二进制。

postgresql binary hex
1个回答
1
投票

使用id, mac, octet, binary, ig_bit, ul_bit 13, aa:XX:XX:XX:XX:XX,aa, 1010 1010, 0, 1

bit strings:

你也可以使用函数with my_data(mac) as ( values ('AA-BB-CC-DD-EE-FF'::macaddr) ) select mac, ('x' || left(mac::text, 2))::bit(8) as octet, substr(('x' || left(mac::text, 2))::bit(8)::text, 8, 1) as ig_bit, substr(('x' || left(mac::text, 2))::bit(8)::text, 7, 1) as ul_bit from my_data mac | octet | ig_bit | ul_bit -------------------+----------+--------+-------- aa:bb:cc:dd:ee:ff | 10101010 | 0 | 1 (1 row) ,例如:

get_bit()

注意,最左边的位的索引是0。

© www.soinside.com 2019 - 2024. All rights reserved.