كيفية استخراج أربعة ints قصيرة غير موقعة من int طويلة طويلة؟
-
02-07-2019 - |
سؤال
لنفترض أن لديّ int طويلًا واحدًا وأريد أخذ أجزاء منه وإنشاء أربعة ints قصيرة غير موقعة منه.
ترتيب معين لا يهم كثيرا هنا.
أعلم عمومًا أنني بحاجة إلى تحويل البتات والاقتطاع إلى حجم int القصير غير الموقع.لكنني أعتقد أنني قد أرتكب بعض الأخطاء الغريبة في مكان ما، لذلك أسأل.
المحلول
#include <stdint.h>
#include <stdio.h>
union ui64 {
uint64_t one;
uint16_t four[4];
};
int
main()
{
union ui64 number = {0x123456789abcdef0};
printf("%x %x %x %x\n", number.four[0], number.four[1],
number.four[2], number.four[3]);
return 0;
}
نصائح أخرى
(unsigned short)((((unsigned long long int)value)>>(x))&(0xFFFF))
أين value
هو الخاص بك long long int
, ، و x
هي 0 أو 16 أو 32 أو 48 للسراويل الأربعة.
union LongLongIntToThreeUnsignedShorts {
long long int long_long_int;
unsigned short int short_ints[sizeof(long long int) / sizeof(short int)];
};
من المفترض أن يفعل ذلك ما تفكر فيه، دون الحاجة إلى العبث بتغيير البتات.
لا تنتمي إلى StackOverflow