คำถามติดแท็ก endianness

29
การตรวจจับ endianness โดยทางโปรแกรมในโปรแกรม C ++
มีวิธีการเขียนโปรแกรมเพื่อตรวจสอบว่าคุณอยู่ในสถาปัตยกรรมขนาดใหญ่หรือเล็กหรือไม่? ฉันต้องสามารถเขียนโค้ดที่จะทำงานบนระบบ Intel หรือ PPC และใช้รหัสเดียวกันทุกประการ (เช่นไม่มีการคอมไพล์แบบมีเงื่อนไข)

30
ฉันจะแปลงระหว่างค่า big-endian และ little-endian ใน C ++ ได้อย่างไร
ฉันจะแปลงระหว่างค่า big-endian และ little-endian ใน C ++ ได้อย่างไร แก้ไข: เพื่อความชัดเจนฉันต้องแปลข้อมูลไบนารี (ค่าทศนิยมที่มีความแม่นยำสองเท่าและจำนวนเต็ม 32- บิตและ 64- บิต) จากสถาปัตยกรรม CPU หนึ่งไปยังอีกสถาปัตยกรรมหนึ่ง สิ่งนี้ไม่เกี่ยวข้องกับเครือข่ายดังนั้น ntoh () และฟังก์ชั่นที่คล้ายกันจะไม่ทำงานที่นี่ แก้ไข # 2: คำตอบที่ฉันยอมรับนำไปใช้โดยตรงกับคอมไพเลอร์ที่ฉันกำหนดเป้าหมาย (ซึ่งเป็นเหตุผลที่ฉันเลือกมัน) อย่างไรก็ตามมีคำตอบที่ดีมากพกพาได้มากกว่าที่นี่
196 c++  endianness 

5
การเปลี่ยนบิตขึ้นอยู่กับ endianness หรือไม่?
สมมติว่าฉันมีหมายเลข'numb'=1025 [00000000 00000000 00000100 00000001]แสดง: บนเครื่อง Little-Endian: 00000001 00000100 00000000 00000000 บนเครื่อง Big-Endian: 00000000 00000000 00000100 00000001 ตอนนี้ถ้าฉันใช้ Left Shift บน 10 บิต (เช่น: numb << = 10) ฉันควรมี: [A] บนเครื่อง Little-Endian: ดังที่ฉันสังเกตเห็นใน GDB Little Endian ทำ Shift ซ้ายใน 3 ขั้นตอน: [ฉันได้แสดงขั้นตอน '3' เพื่อให้เข้าใจการประมวลผลดีขึ้นเท่านั้น] ปฏิบัติต่อหมายเลข ในอนุสัญญา Big-Endian: 00000000 00000000 00000100 …
156 c  endianness 

8
แปลงอาร์เรย์ไบต์เป็นจำนวนเต็มใน Java และในทางกลับกัน
ฉันต้องการเก็บข้อมูลลงในอาร์เรย์ไบต์ใน Java โดยทั่วไปเพียงแค่ตัวเลขซึ่งอาจใช้เวลาสูงสุด 2 ไบต์ต่อตัวเลข ฉันต้องการทราบว่าฉันสามารถแปลงจำนวนเต็มเป็นอาร์เรย์ไบต์ยาว 2 ไบต์และในทางกลับกัน ฉันพบวิธีแก้ปัญหาจำนวนมาก googling แต่ส่วนใหญ่ไม่ได้อธิบายว่าเกิดอะไรขึ้นในโค้ด มีสิ่งที่เปลี่ยนแปลงอย่างมากที่ฉันไม่เข้าใจจริงๆดังนั้นฉันขอขอบคุณคำอธิบายพื้นฐาน
139 java  types  endianness 

19
C นิยามมาโครเพื่อกำหนด endian ใหญ่หรือเครื่อง endian น้อย?
มีคำจำกัดความมาโครหนึ่งบรรทัดเพื่อกำหนดความสิ้นสุดของเครื่องหรือไม่ ฉันใช้รหัสต่อไปนี้ แต่การแปลงเป็นมาโครจะยาวเกินไป unsigned char test_endian( void ) { int test_var = 1; unsigned char *test_endian = (unsigned char*)&test_var; return (test_endian[0] == 0); }

8
Java อ่านจำนวนเต็มใน endian น้อยหรือ big endian หรือไม่?
ฉันถามเพราะฉันกำลังส่งสตรีมไบต์จากกระบวนการ C ไปยัง Java ทางด้าน C จำนวนเต็ม 32 บิตมี LSB เป็นไบต์แรกและ MSB คือไบต์ที่ 4 คำถามของฉันคือ: ในฝั่ง Java เมื่อเราอ่านไบต์ตามที่ส่งมาจากกระบวนการ C endianในฝั่ง Java คืออะไร? คำถามติดตามผล: หาก endian ในฝั่ง Java ไม่เหมือนกับที่ส่งมาฉันจะแปลงระหว่างพวกเขาได้อย่างไร
96 java  endianness 

13
แปลง endian ตัวใหญ่เป็น endian ตัวเล็กใน C [โดยไม่ต้องใช้ func ที่ให้มา] [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน7 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันต้องเขียนฟังก์ชันเพื่อแปลง endian ตัวใหญ่เป็น endian ตัวเล็กใน C. ฉันไม่สามารถใช้ฟังก์ชันไลบรารีใด ๆ
93 c  swap  endianness 


1
ทำไม Network-byte-order จึงถูกกำหนดให้เป็น big-endian? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดขึ้นมาใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ตามที่เขียนไว้ในหัวข้อคำถามของฉันคือเหตุใดTCP / IP จึงใช้การเข้ารหัส endian ขนาดใหญ่เมื่อส่งข้อมูลไม่ใช่รูปแบบทางเลือกอื่น ๆ ของ little-endian

7
C / C ++: บังคับลำดับฟิลด์บิตและการจัดตำแหน่ง
ฉันอ่านว่าลำดับของเขตข้อมูลบิตภายในโครงสร้างเป็นแพลตฟอร์มเฉพาะ แล้วถ้าฉันใช้ตัวเลือกการบรรจุเฉพาะของคอมไพเลอร์ที่แตกต่างกันข้อมูลการรับประกันนี้จะถูกจัดเก็บตามลำดับที่ถูกต้องตามที่เขียนหรือไม่ ตัวอย่างเช่น: struct Message { unsigned int version : 3; unsigned int type : 1; unsigned int id : 5; unsigned int data : 6; } __attribute__ ((__packed__)); บนโปรเซสเซอร์ Intel ที่มีคอมไพเลอร์ GCC ฟิลด์ต่างๆจะถูกจัดวางไว้ในหน่วยความจำตามที่แสดง Message.versionเป็น 3 บิตแรกในบัฟเฟอร์และMessage.typeตามด้วย หากฉันพบตัวเลือกการบรรจุโครงสร้างที่เทียบเท่ากันสำหรับคอมไพเลอร์ต่างๆสิ่งนี้จะเป็นข้ามแพลตฟอร์มหรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.