C_and_CPP 板


LINE

欧欧 刚刚发现了abcdefghi大大与cplusplus大大的提示後, 发现了一些蛛丝马迹 我终於知道下面的判断是在干麻了 :   if( *(int*)(h+3) != 0x01020304 ) : printf("not in supported byte order"); 这要追朔到当初cpu再设计的时候, 对记忆体的存取方法 有分Big-Endian 跟Little-Endian 两种 现今的intel跟amd的cpu都是Little-Endian, 也就是这个主题我的上一篇回文一样 超过 1 byte的资料型态在记忆体中是倒着存放 (请参考我的上一篇回文范例) 而除了intel跟amd的cpu, 其他家的cpu几乎都是Big-Endian 也就是超过 1 byte的资料型态在记忆体中是顺着存放 总之这个判断式在判断你的cpu的种类 如果种类不合, 就印出"not in supported byte order" 至於Big-Endian 跟Little-Endian这个名词是怎麽来的, 很有趣 他出自於《格利佛游记》 说明如下: 最後我们讲一则有趣的故事。为什麽字元的排序设计,要叫做大头或小头呢? 虽然从前面的解释,我们看得出意义,但是这背後其实有一个故事。 Big-Endian 和 Little-Endian 并不是计算机工程师定的名称,而是英文作家 Jonathan Swift 在将近 300 年前创造的名词!这个名词出现於 Swift 创作的着名小 说 "Gulliver's Travels",中文通常翻译作《格利佛游记》或者《大小人国历险记》 或者《小人国历险记》之类的,许多读者大概在童年时期读过这本书的童话版节译本。 这部故事书里,有一个虚构的『小人国』,称为 Lilliput。格利佛意外抵达 Lilliput 的时候,该国正在内战。内战分成两大派系 (没有派系就没有内战):Big-Endian 和 Little-Endian。 Big-Endian 和 Little-Endian 为了一件很可笑的小事而分成派系: Big-Endian (保守派) 坚持要从鸡蛋比较大的那一头敲开蛋壳 (大头开蛋),而 Little-Endian ( 改革派) 坚持要从鸡蛋比较小的那一头敲开蛋壳 (小头开蛋)。鸡蛋比较大的那一头叫做 big-end,因此支持大头开蛋者就叫做 big-endian;同理,另一派就叫做 little-endian 了。作者其实可能要藉用这个情节,来讽刺当时在英国的政治与宗教时 事。後来,计算机科学家也在争吵关於 byte order 的问题:究竟是把高位的字元放在前 面比较好、还是放在後面比较好?一位当时在美国南加大的计算机科学家 Danny Cohen 在 1980 年 4 月 1 日,发表了标题为 "On Holy Wars and a Plea for Peace" 的文章 (後来在 1981 年刊登於 IEEE 的 Computer 期刊),把这场计算机科学家的论战比喻成格利佛在小人国遇见的 Big-Endian 和 Little-Endian 两派之内战。这是非常有趣的譬喻,一直流传至今,成为这两种硬 体设计理念的正式代名词。可见,如果童话书读得透彻,长大後可以应用在伟大的论证 上。 参考资料出处 : http://libai.math.ncu.edu.tw/bcc16/pool/1.33.shtml ※ 引述《masam (科学面)》之铭言: :   小弟最近在读一个程式,其中有一段程式码看不是很懂...... : 假设有一个字元阵列h :   那麽以下的code中 :   if( *(int*)(h+3) != 0x01020304 ) : printf("not in supported byte order"); : 这个if的目的是在做什麽? : 我的认知是(h+3)指的是h[3]的记忆体位址,type是char* : 所以(int*)(h+3)会把一个type是char*的资料转型成int*再丢出来 : 这时候丢出来的东西指的是一个type为int*的资料,指到某一个int : 最後再用*去把这个int取出来 : 可是h+3这个位址不是OS assign的吗? : 那麽去对这个位址做处理有什麽意义吗? :   我想应该是我的观念有错 :   麻烦指点一下迷津,谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.158.140
1F:推 abcdefghi:目前流行的ARM,PowerPC,MIPS两种Endian都支援... 07/04 09:35
2F:→ abcdefghi:甚至实务上,很多人都习惯设成Little-Endian来用. 07/04 09:38
3F:→ eugenehsu:感谢补充 ^^ 07/04 10:36
4F:推 s8911090:但想不透为啥是h+3 07/04 13:31
5F:推 costbook:好深澳啊 07/04 20:26
6F:推 jeonjh:感谢你!很有趣的故事... 11/15 01:55







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP