У меня есть структура, которая содержит целое число и char .. как я могу получить доступ к последним 2 байтам моего int ??доступ к последним 2 байтам целого числа
ответ
Предположим, вы используете C/C++, у вас есть что-то вроде:
struct {
int myInt;
char myChar;
} myStruct;
и хотите:
lastTwoBytesOfInt = myStruct.myInt & 0x0000FFFF;
Посмотрев на Wikipedia может помочь вам понять, битовые операции, если вы не» они еще не знают их.
Кроме того, вы можете взглянуть на Endianness, потому что «последние» байты целого числа являются несколько неоднозначным термином.
Термин «последний байт» в целочисленном виде не ясен. Есть две вещи, о которых вы могли подумать:
- Самый/наименее significant bytes.
- Последние байты, когда целое число кодируется либо в маленькой, либо в большой форме endian. Endianness часто называют байтовым порядком.
В первом случае наименее значимые байты могут быть доступны на большинстве языков, используя (x & 0xffff).
Во втором случае вам нужно будет проверить, какой порядок байтов вам нужен. Например, если вы используете сетевой байтовый порядок, последний байт является наименее значимым байтом. В других случаях это может быть самый старший байт, который является последним байтом.
Ух, проигнорируйте мой предыдущий комментарий, это конец дня, и мой мозг устал ... –
int i = // ?? get your int somehow
int lastTwoBytes = i & 0x0000FFFF;
int firstTwoBytes = (i >> 16) & 0x0000FFFF; // maybe you really want the first two?
Используя объединение, как это должно позволить вам получить в отдельных байтах целого:
union {
int i;
unsigned char bytes[sizeof(int)];
} int_bytes;
точно, сколько байтов составляют целое число зависит от реализации.
нет, вы не должны использовать союзы так, как вы подразумеваете. –
@ Cirno- В каком смысле? Я не вызываю неопределенное поведение. Это по существу не отличается от объявления 'int i; char * ptr = (char *) & i; 'и используя' ptr', как массив для последовательного доступа к байтам. Это общий метод для сброса байтов блока данных в отладочном коде. – bta
В C99 «значение члена объединения, отличного от последнего, сохраненного в», является «неуказанным поведением» (J.1). Unspecified, не undefined - так что это не ошибка, но реализация может выбрать, что ей нравится. Итак, технически не переносимый, но вам придется странно внедрять союзы для этого * not *, чтобы дать вам байты представления 'i'. –
Вот еще один способ получить доступ к верхнему и нижнему 16-бит (предполагается, что короткий 16-бит на вашей системе):
unsigned int x = 0x12345678;
cout << hex << ((unsigned short*)&x)[0] << endl; // prints 5678
cout << hex << ((unsigned short*)&x)[1] << endl; // prints 1234
Обратите внимание, что результат зависит от байт вашей системы. http://en.wikipedia.org/wiki/Endianness
В окнах вы можете использовать HiWord()/LoWord() для доступа к первому или последнему 2 байтам.
- 1. доступ к байтам целого числа в c
- 2. Python, приведение целого к байтам.
- 3. Доступ к байтам страницы
- 4. Как получить доступ к одному байту целого числа?
- 5. Доступ к байтам в BinaryJS
- 6. Доступ к байтам в массиве MIPS
- 7. Класс C++ для доступа к байтам/словам целого числа без знака
- 8. Доступ к отдельным байтам в массиве
- 9. доступ к списку целого числа, связанного с параметром командной строки
- 10. Целого числа к преобразованию строки
- 11. Ограничить доступ к последним СМИ
- 12. К & R 2-8 rightrotate (длина целого числа в битах)
- 13. Последние 2 цифры целого числа? Python 3
- 14. преобразование целого числа из 2 байтов
- 15. Как использовать только 10 бит int, который равен 2 байтам?
- 16. C#: Добавление целого числа к выходу
- 17. Добавление целого числа к сессии сохраненного целое
- 18. Проверка целого числа
- 19. Символы к байтам
- 20. Строка к байтам, C#
- 21. Найдите логарифм базы 2 следующей мощности 2 целого числа
- 22. нахождение целого числа части числа
- 23. Извлечение целого числа из числа
- 24. факторизации целого числа
- 25. Добавьте «0» к фронту целого числа
- 26. Доступ к отдельным байтам в PROGMEM на Arduino/AVR
- 27. умножение не целого числа и целого числа в списке
- 28. Обратные цифры целого числа
- 29. Ошибка чтения целого числа
- 30. округление до целого числа
Это в C/C++? –
Какой язык? Подумайте о мечении лучше. – spinon
Теги @дарина не обязательно соответствуют языкам. Хотя знание большего контекста того, что anajo пытается сделать, было бы полезно. – corsiKa