作者LoganChien (简子翔)
看板b97902HW
标题[计概] Endianness 的范例
时间Thu Oct 9 13:51:22 2008
单班的同学上许永真老师的计概课的时候,
应该有听到 Endianness。
它是什麽呢?
简单讲就是大於 1 byte 的整数型别要怎麽在记忆体中表示(Layout)。
例如:
0x04030201 这一个数可以表示成
Address Value
0x00001111: 0x01
0x00001112: 0x02
0x00001113: 0x03
0x00001114: 0x04
也可以表示成
Address Value
0x00001111 0x04
0x00001112 0x03
0x00001113 0x02
0x00001114 0x01
前者是 Little Endian 後者是 Big Endian。
看不懂?没有关系,大一除了考笔试之外,应该不会碰到这一个问
题。最後附上一段我随手写得程式码,让大家玩玩,不过请新手不
要学,这里有不太好的技巧。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
int test[5];
test[1] = 1313821696;
test[3] = 5525326;
memset(&test[0], '\0', sizeof(int));
memset(&test[2], '\0', sizeof(int));
memset(&test[4], '\0', sizeof(int));
printf("This platform is %s\tlittle endian.\n", test + 1);
printf("This platform is %s\tbig endian.\n", test + 3);
return EXIT_SUCCESS;
}
请在 INT = 4 byte 而且使用 ASCII 的环境之中,编译、执行。
结果应该很有趣! XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.241.166
※ 编辑: LoganChien 来自: 140.112.241.166 (10/09 13:52)
※ 编辑: LoganChien 来自: 140.112.241.166 (10/09 14:03)
1F:推 anfranion:是永真老师唷XD 10/09 14:54
2F:→ LoganChien:我错了,偷偷改...... 10/09 14:56
※ 编辑: LoganChien 来自: 140.112.241.166 (10/09 14:56)
3F:推 xflash96:4e4f5400 v.s. 00544f4e 强. but why memset not '='? 10/10 00:00
4F:推 drazi:对~ 所以因应不同平台 winsock 专门有函式来处理 10/10 02:14
5F:推 drazi:这两种的转换XD 10/10 02:14