Search
ctrl/
Ask AI
Light
Dark
System

Bytes Functions and Operators

bytes

Byte sequence

Endian

An enum for indicating integer value encoding.

bytes[i]

Accesses a byte at a given index.

bytes[from:to]

Produces a bytes sub-sequence from an existing bytes value.

bytes ++ bytes

Concatenates two bytes values into one.

= != ?= ?!= < > <= >=

Comparison operators

len()

Returns the number of bytes.

contains()

Checks if the byte sequence contains a given subsequence.

find()

Finds the index of the first occurrence of a subsequence.

to_bytes()

Converts a given value into binary representation as bytes.

to_str()

Returns the string representation of the input value.

to_int16()

Returns an int16 value parsed from the given input.

to_int32()

Returns an int32 value parsed from the given input.

to_int64()

Returns an int64 value parsed from the given input.

to_uuid()

Returns a uuid value parsed from 128-bit input.

bytes_get_bit()

Returns the specified bit of the bytes value.

bit_count()

Return the number of bits set in the bytes value.

enc::base64_encode()

Returns a Base64-encoded str of the bytes value.

enc::base64_decode()

Returns the bytes of a Base64-encoded str.

type

bytes
bytes

A sequence of bytes representing raw data.

Bytes can be represented as a literal using this syntax: b''.

Copy
db> 
select b'Hello, world';
{b'Hello, world'}
Copy
db> 
select b'Hello,\x20world\x01';
{b'Hello, world\x01'}

There are also some generic functions that can operate on bytes:

Copy
db> 
select contains(b'qwerty', b'42');
{false}

Bytes are rendered as base64-encoded strings in JSON. When you cast a bytes value into JSON, that’s what you’ll get. In order to cast a json value into bytes, it must be a base64-encoded string.

Copy
db> 
select <json>b'Hello EdgeDB!';
{"\"SGVsbG8gRWRnZURCIQ==\""}
Copy
db> 
select <bytes>to_json("\"SGVsbG8gRWRnZURCIQ==\"");
{b'Hello EdgeDB!'}

typeNew

Endian
New
Endian

An enum for indicating integer value encoding.

This enum is used by the to_int16(), to_int32(), to_int64() and the to_bytes() converters working with bytes and integers.

Endian.Big stands for big-endian encoding going from most significant byte to least. Endian.Little stands for little-endian encoding going from least to most significant byte.

Copy
db> 
select to_bytes(<int32>16908295, Endian.Big);
{b'\x01\x02\x00\x07'}
Copy
db> 
select to_int32(b'\x01\x02\x00\x07', Endian.Big);
{16908295}
Copy
db> 
select to_bytes(<int32>16908295, Endian.Little);
{b'\x07\x00\x02\x01'}
Copy
db> 
select to_int32(b'\x07\x00\x02\x01', Endian.Little);
{16908295}

operator

bytes[i]
bytes [ int64 ] -> bytes

Accesses a byte at a given index.

Examples:

Copy
db> 
select b'binary \x01\x02\x03\x04 ftw!'[2];
{b'n'}
Copy
db> 
select b'binary \x01\x02\x03\x04 ftw!'[8];
{b'\x02'}

operator

bytes[from:to]
bytes [ int64 : int64 ] -> bytes

Produces a bytes sub-sequence from an existing bytes value.

Examples:

Copy
db> 
select b'\x01\x02\x03\x04 ftw!'[2:-1];
{b'\x03\x04 ftw'}
Copy
db> 
select b'some bytes'[2:-3];
{b'me by'}

operator

bytes ++ bytes
bytes ++ bytes -> bytes

Concatenates two bytes values into one.

Copy
db> 
select b'\x01\x02' ++ b'\x03\x04';
{b'\x01\x02\x03\x04'}

function

to_bytes()
std::to_bytes(s: str) -> bytesstd::to_bytes(val: int16, endian: Endian) -> bytesstd::to_bytes(val: int32, endian: Endian) -> bytesstd::to_bytes(val: int64, endian: Endian) -> bytesstd::to_bytes(val: uuid) -> bytes

Converts a given value into binary representation as bytes.

The strings get converted using UTF-8 encoding:

Copy
db> 
select to_bytes('テキスト');
{b'\xe3\x83\x86\xe3\x82\xad\xe3\x82\xb9\xe3\x83\x88'}

The integer values can be encoded as big-endian (most significant bit comes first) byte strings:

Copy
db> 
select to_bytes(<int16>31, Endian.Big);
{b'\x00\x1f'}
Copy
db> 
select to_bytes(<int32>31, Endian.Big);
{b'\x00\x00\x00\x1f'}
Copy
db> 
select to_bytes(123456789123456789, Endian.Big);
{b'\x01\xb6\x9bK\xac\xd0_\x15'}

Due to underlying implementation details using big-endian encoding results in slightly faster performance of to_bytes when converting integers.

The UUID values are converted to the underlying string of 16 bytes:

Copy
db> 
select to_bytes(<uuid>'1d70c86e-cc92-11ee-b4c7-a7aa0a34e2ae');
{b'\x1dp\xc8n\xcc\x92\x11\xee\xb4\xc7\xa7\xaa\n4\xe2\xae'}

To perform the reverse conversion there are corresponding functions: to_str(), to_int16(), to_int32(), to_int64(), to_uuid().

function

bytes_get_bit()
std::bytes_get_bit(bytes: bytes, nth: int64) -> int64

Returns the specified bit of the bytes value.

When looking for the nth bit, this function will enumerate bits from least to most significant in each byte.

Copy
db> 
... 
... 
for n in {0, 1, 2, 3, 4, 5, 6, 7,
          8, 9, 10, 11, 12, 13 ,14, 15}
union bytes_get_bit(b'ab', n);
{1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0}

function

enc::base64_encode()
enc::base64_encode(b: bytes) -> str

Returns a Base64-encoded str of the bytes value.

Copy
db> 
select enc::base64_encode(b'hello');
{'aGVsbG8='}

function

enc::base64_decode()
enc::base64_decode(s: str) -> bytes

Returns the bytes of a Base64-encoded str.

Returns an InvalidValueError if input is not valid Base64.

Copy
db> 
select enc::base64_decode('aGVsbG8=');
{b'hello'}
Copy
db> 
select enc::base64_decode('aGVsbG8');
edgedb error: InvalidValueError: invalid base64 end sequence