อย่างที่เราทราบกันดีว่าอักขระแต่ละตัวที่พิมพ์ได้จะมีค่า ascii ของตัวเอง ฉันกำลังพยายามค่า ASCII 8 ตัวอักษรเป็นจำนวนเต็ม 64 บิต แต่จะคัดลอกเพียง 32 บิตเท่านั้น
char * ch = "AAAABBBB";
unsigned long int i;
//copy charater's ascii to 64 bits int
memcpy(&i, ch, 8);
printf("integer hold: 0x%x\n", i);
มีอะไรผิดปกติกับรหัสนี้หรือไม่?
ผลลัพธ์ที่ฉันคาดหวังคือ:
integer hold: 0x4141414142424242
แต่ผลลัพธ์คือ:
integer hold: 0x41414141
%x
ใช้สำหรับunsigned int
ไม่ใช่unsigned long int
ความไม่ตรงกันจะไม่ได้กำหนดไว้เสมอ แม้ว่าการใช้งานใดๆ หรือทั้งหมดจะเกิดขึ้นเพื่อทำสิ่งที่สมเหตุสมผลก็ตาม ฉันจะไปรับเอาต์พุตคำเตือนแล้ววางที่นี่ในครั้งต่อไปที่ฉันอยู่ที่คอมพิวเตอร์ - person Carl Norum   schedule 06.02.2013%x
ด้วย%lx
- person Carl Norum   schedule 06.02.2013-W
ใด ๆ ด้วยซ้ำ ข้อความเหล่านี้ส่งออกตามค่าเริ่มต้นด้วย GCC 4.2.1 (เก่า ฉันรู้ แต่ฉันใช้ Mac) และเสียงดังกราว 3.2 - person Carl Norum   schedule 06.02.2013