У меня есть int [2] представление long int в 32-битной машине и я хочу преобразовать его в long на 64-битной машине.есть ли безопасный архитектурно-независимый способ сделать это преобразование?
Не совсем.Потому что помимо порядка байтов, размеры двух типов данных также могут различаться.На некоторых популярных платформах int
и long
имеют одинаковый размер (оба 32 бита)
В конечном счете, это зависит от того, как вы создали представление int[2]
.Что бы вы ни делали для создания этого массива int
, нужно обратить его вспять, чтобы получить из него действительный long
.
Один подход, который будет работать на практике (но, с технической точки зрения, неопределенное поведение), должен поместить оба в объединение:
union {
int i2[2];
long l;
} u;
Теперь вы можете просто написать в u.i2
и прочитать из u.l
.Стандарт C ++ технически не допускает этого (это неопределенное поведение), но это настолько распространенная уловка, что основные компиляторы в любом случае явно его поддерживают.
Однако лучшим подходом может быть использование char[]
вместо int[]
, потому что char
явно разрешено использовать псевдонимы других типов.