У меня было несколько беззнаковых 32-разрядных целых чисел с прямым порядком байтов, которые мне нужно было преобразовать, и это было тривиально легко, когда я нашел правильный заголовок:
#include <endian.h>
...
be32toh(some_int);
Однако, endian.h
указывает, что это для целых чисел без знака. Для целого числа со знаком я не совсем уверен, что делать, так как не похоже, что существуют заголовочные файлы для такого рода вещей, и я не очень знаком с манипулированием битами в C ++.
Редактировать: Так как формат моего целого числа не совсем понятен, позвольте мне объяснить подробнее. У меня есть целое число в форме
abcdefghijklmnopqrstuvwxyz012345
где каждый символ представляет бит. бит a
представляет знак. Я знаю, что байты всегда с прямым порядком байтов, поэтому помимо перемещения байтов в другой порядок, например
yz012345qrstwx...
Мне также нужен какой-то способ убедиться, что бит y
показывает знак, а не какой-то бит в числе. Я ... понятия не имею, как это сделать.
Редактировать: моя проблема заключалась в том, что я думал, что знаковый бит всегда был первым в порядке, когда это не так. Знаковый бит всегда является MSB, что означает, что если вы находитесь в форме с прямым порядком байтов, то знаковый бит будет в середине байтов, составляющих ваше целое число.