Определить порядок байтов, используемый текущей архитектурой

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

Для того, чтобы определить порядок байтов можно воспользоваться следующим кодом:

import std.stdio;

void main()
{
	ushort x = 1;
	writeln(
		*(cast(ubyte*) &x) == 0 ?
		"big-endian" :
		"little-endian"
	);
}

Данный код выводит именование порядка байтов в строковом виде и работает за счет стандартных операций приведения типа и взятия адреса: в частности, использование указателей позволяет обратиться к первому байту из изначального значения ushort (первому в порядке хранения в памяти), а приведение типа помогает сделать сравнение с 0 более доступным.

P.S: Возможно, объяснение слишком корявое, потому рекомендую обратиться сюда за более подробной информацией.

Добавить комментарий