Интернет магазин китайских планшетных компьютеров



Компьютеры - Порядок байтов - Вещественные числа

23 января 2011


Оглавление:
1. Порядок байтов
2. Проблемы совместимости
3. Вещественные числа
4. Интересные факты



Хранение вещественных чисел может зависеть от порядка байт; так, на x86 используются форматы IEEE 754 со знаком и порядком числа в старших байтах.

Юникод

Если Юникод записан в виде UTF-16 или UTF-32, то порядок байтов является существенным. Одним из способов обозначения порядка байтов в юникодовых текстах является постановка в начале специального символа BOM — «перевёрнутый» вариант этого символа не существует и не допускается в текстах.

Конвертация

Для преобразования между сетевым порядком байтов, который всегда big-endian, и порядком байтов, использующимся на машине, стандарт POSIX предусматривает функции htonl, htons, ntohl, ntohs:

  • uint32_t htonl; — конвертирует 32-битную беззнаковую величину из локального порядка байтов в сетевой;
  • uint16_t htons; — конвертирует 16-битную беззнаковую величину из локального порядка байтов в сетевой;
  • uint32_t ntohl; — конвертирует 32-битную беззнаковую величину из сетевого порядка байтов в локальный;
  • uint16_t ntohs; — конвертирует 16-битную беззнаковую величину из сетевого порядка байтов в локальный.

В случае совпадения текущего порядка байтов и сетевого, функции могут быть «пустыми». Стандарт также допускает, чтобы эти функции были реализованы макросами.

Существует много языков и библиотек со средствами конвертации в оба основных порядка байт и обратно.

Ядро Linux: le16_to_cpu, cpu_to_be32, cpu_to_le16p, и так далее;

Ядро FreeBSD: htobe16, le32toh, и так далее;

Erlang:

<<Count:32/big-unsigned-integer, Average:64/big-float>> = Chunk
Message = <<Length:32/little-unsigned-integer, MType:16/little-unsigned-integer, MessageBody>>

Python:

import struct
Count, Average = struct.unpack
Message = struct.pack + MessageBody

Perl:

 = unpack;
$Message = pack<', $Length, $MType) . $MessageBody;
 . $MessageBody;)

данные примеры для Erlang, Python, Perl содержат идентичную функциональность.



Просмотров: 4847


<<< Порт (компьютер)