У меня есть два 32-битных целых числа и два 16-битных целых числа. Как я могу объединить их в один 12-байтовый массив в ядре?Как объединить четыре целых числа в один массив в ядре?
0
A
ответ
-1
char a[12];
char* b = &a[0];
int* c = (int*)b;
c[0] = n1;
c[1] = n2;
short* d = (short*)(b + 8);
d[0] = s1;
d[1] = s2;
Редактировать: когда эти статусы остаются в функции, тогда не будет проблемы с строгим псевдонимом.
Кроме того, если вы хотите узнать больше о ступенчатости найти эту функцию из источника GCC в: c_common_get_alias_set
2
Вот один (C99) способ, если вы хотите, родной порядок байтов машины:
union {
struct {
uint32_t a, b;
uint16_t c, d;
} ints;
char bytes[12];
} tmp;
tmp.ints.a = 0xdeadf00d;
tmp.ints.b = 0xfeedbabe;
tmp.ints.c = 0xfee1;
tmp.ints.d = 0x600d;
Теперь вы может получить доступ к массиву tmp.bytes
, чтобы получить байты, которые составляют числа. На ideone, bytes
содержит:
0d f0 ad de be ba ed fe e1 fe 0d 60
Вы можете добавить некоторые (компилятор специфического) инструкции отступы, чтобы убедиться, что целые числа являются «упакованными» тоже. Вышеприведенное имеет приличное выравнивание для многих компиляторов.
Смежные вопросы
- 1. Объединить четыре целых числа в один
- 2. Четыре целых числа в четырех байтах?
- 3. Как объединить четыре foreach в один foreach?
- 4. Как объединить четыре запроса в один запрос?
- 5. Объединить два целых числа
- 6. Как объединить два целых числа в C#?
- 7. Как объединить два целых числа в C
- 8. Объединить четыре foreach в один foreach?
- 9. объединить четыре стола в один новый стол
- 10. Рекурсивно объединить два целых числа
- 11. C++ объединить 3 целых числа
- 12. Как объединить многомерный массив в один массив?
- 13. Извлечь ровно четыре целых числа из строки в regex
- 14. Как объединить 4 целых числа в одно целое в VC++?
- 15. Разделение цифр числа в массив целых чисел
- 16. Объединить два целых числа весной EL
- 17. Объединить два целых числа как integer.decimal в C
- 18. PostgreSQL: Объединить числа и строки в массив
- 19. Как объединить три целых числа в один уникальный тег, чтобы тег оставался целым в C++?
- 20. Как объединить четыре окна в четыре равномерно распределенных стекла?
- 21. Как объединить два массива в один массив?
- 22. Как объединить ответы cURL в один массив?
- 23. Как объединить эти массивы в один массив?
- 24. Как объединить общие элементы в один массив?
- 25. Как объединить значения массива в один массив?
- 26. Как объединить массив массивов в один php
- 27. Как объединить идентичные строки в один массив?
- 28. Определите, если четыре целых числа содержат две пары
- 29. Мне нужно объединить четыре результата набора данных в один таблик
- 30. Объединить 4 отдельных целых числа в форме даты в C
'int * c = (int *) b' нарушает строгую сглаживание, и нет гарантии, что' a' даже подходящим образом выровнен для доступа через указатель 'int *'. – a3f
Как я уже сказал, я рассмотрел строгий псевдоним. Char * не нарушит строгого сглаживания. И я подтверждаю это из источника GCC. – linzuojian
@linzuojian. Помимо GCC есть другие компиляторы. Вы также предполагаете, что 'int' - 32 бита, 'short' - 16 бит, а 'char' - 8 бит. Ни один из них не указан в стандарте. Только минимальные размеры. – Degustaf