Spec-Zone.ru › Nim

std/endians

Source Edit

Этот модуль содержит вспомогательные функции для работы с различными порядками байтов (порядком байтов).

Порядок байтов — это порядок байтов значения в памяти. Big-endian означает, что самый значимый байт хранится по наименьшему адресу памяти, а little-endian означает, что наименее значимый байт хранится по наименьшему адресу. См. также https://en.wikipedia.org/wiki/Endianness.

Нестабильный API.

Процедуры

proc bigEndian16(outp, inp: pointer) {.inline, ...raises: [], tags: [], forbids: [].}
Копирует inp в outp, сохраняя его в 16-битном формате big-endian. Оба буфера должны содержать не менее 2 байтов. Source Edit
proc bigEndian32(outp, inp: pointer) {.inline, ...raises: [], tags: [], forbids: [].}
Копирует inp в outp, сохраняя его в 32-битном формате big-endian. Оба буфера должны содержать не менее 4 байтов. Source Edit
proc bigEndian64(outp, inp: pointer) {.inline, ...raises: [], tags: [], forbids: [].}
Копирует inp в outp, сохраняя его в 64-битном формате big-endian. Оба буфера должны содержать не менее 8 байтов. Source Edit
proc littleEndian16(outp, inp: pointer) {.inline, ...raises: [], tags: [],
    forbids: [].}
Копирует inp в outp, сохраняя его в 16-битном формате little-endian. Оба буфера должны содержать не менее 2 байтов. Source Edit
proc littleEndian32(outp, inp: pointer) {.inline, ...raises: [], tags: [],
    forbids: [].}
Копирует inp в outp, сохраняя его в 32-битном формате little-endian. Оба буфера должны содержать не менее 4 байтов. Source Edit
proc littleEndian64(outp, inp: pointer) {.inline, ...raises: [], tags: [],
    forbids: [].}
Копирует inp в outp, сохраняя его в 64-битном формате little-endian. Оба буфера должны содержать не менее 8 байтов. Source Edit
proc swapEndian16(outp, inp: pointer) {.inline, noSideEffect, ...raises: [],
                                        tags: [], forbids: [].}
Копирует inp в outp, инвертируя порядок байтов. Оба буфера должны содержать не менее 2 байтов.

Пример:

var a = [1'u8, 2]
var b: array[2, uint8]
swapEndian16(addr b, addr a)
assert b == [2'u8, 1]
Source Edit
proc swapEndian32(outp, inp: pointer) {.inline, noSideEffect, ...raises: [],
                                        tags: [], forbids: [].}
Копирует inp в outp, инвертируя порядок байтов. Оба буфера должны содержать не менее 4 байтов.

Пример:

var a = [1'u8, 2, 3, 4]
var b: array[4, uint8]
swapEndian32(addr b, addr a)
assert b == [4'u8, 3, 2, 1]
Source Edit
proc swapEndian64(outp, inp: pointer) {.inline, noSideEffect, ...raises: [],
                                        tags: [], forbids: [].}
Копирует inp в outp, инвертируя порядок байтов. Оба буфера должны содержать не менее 8 байтов.

Пример:

var a = [1'u8, 2, 3, 4, 5, 6, 7, 8]
var b: array[8, uint8]
swapEndian64(addr b, addr a)
assert b == [8'u8, 7, 6, 5, 4, 3, 2, 1]
Source Edit

© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/endians.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API