[oeasy]python0074[專業(yè)選修]字節(jié)序_byte_order_struct_pack_大端序_小端序

進(jìn)制轉(zhuǎn)化
回憶上次內(nèi)容
上次 總結(jié)了
bin
oct
int
hex
eval
計(jì)算字符串值的函數(shù)
四種進(jìn)制的轉(zhuǎn)化函數(shù)
數(shù)字41 和 字符串"41" 的不同
數(shù)字存儲(chǔ)依據(jù)是 數(shù)字的二進(jìn)制值
轉(zhuǎn)化為 二進(jìn)制 0b101001
這就兩個(gè)字節(jié)
字節(jié)前面補(bǔ)零
得到
b"\x00\x29"
兩個(gè)字符
字符存儲(chǔ)依據(jù)是 ascii序號(hào)
b"\x34\x31"
字符串"41"
數(shù)字 41
但是 這兩個(gè)字節(jié) 在存儲(chǔ)的時(shí)候
有先后次序嗎???
存儲(chǔ)
258 這個(gè)數(shù)字
字節(jié)狀態(tài)什么樣子呢?
如果用兩個(gè)字節(jié)存儲(chǔ)的話
字節(jié)狀態(tài)會(huì)是
b"\x01\x02"
嗎?
參考一個(gè)網(wǎng)站
https://binaryconvert.com/
觀察網(wǎng)站
打開網(wǎng)址
https://binaryconvert.com/
選擇有符號(hào)雙字節(jié)
signed short
選擇結(jié)果
網(wǎng)站中顯示結(jié)果
可以使用python
得到這兩個(gè)字節(jié)的字節(jié)狀態(tài)嗎?
借助一個(gè)包
struct
struct
導(dǎo)入struct包,并查看手冊(cè)
import struct
help(struct)
數(shù)據(jù)類型是 short
對(duì)應(yīng) 兩個(gè)字節(jié)有符號(hào)的 整型數(shù)字
對(duì)應(yīng)的符號(hào) 是
h
得到字節(jié)狀態(tài)
得到字節(jié)狀態(tài)是
b"\x02\x01"
不是應(yīng)該對(duì)應(yīng)著
b"\x01\x02"
么?
這數(shù)字 可不能 讀錯(cuò)寫錯(cuò)啊?
這該 如何理解 呢?
字節(jié)序
這前后顛倒的問題
涉及到 一個(gè)東西叫做
字節(jié)序
byte order
這些可選的修飾字符
暗示字節(jié)的次序
字節(jié)次序有兩種
<
little-endian小字節(jié)序>
big-endian大字節(jié)序把這個(gè)修飾字節(jié)序的字符放在類型h(short)前面
<h
: little-endian 2-byte>h
: ?big-endian 2-byte
字節(jié)序?qū)Ρ?/h1>下面兩個(gè)不同的字節(jié)次序
0x12345678
對(duì)應(yīng)同一個(gè)數(shù)字
BigEndian
從低地址開始
在高地址結(jié)束
也就是地址數(shù)值大的地方結(jié)束
所以叫BigEndian
LittleEndian
從高地址開始
在低地址結(jié)束
也就是地址數(shù)值小的地方結(jié)束
所以叫LittleEndian
little-endian < h
<h 用的是小字節(jié)序
編碼模式屬于 little-endian
最低有效位(least significant byte)放在低地址 a
這是目前常用的指令集架構(gòu) ($x86、x86-64$) 用的字節(jié)序
CISC(復(fù)雜指令集)
另一種字節(jié)序是大字節(jié)序
應(yīng)用于 RISC(精簡指令集)
big-endian >h
h ?是按下圖中的字節(jié)排序
編碼模式屬于 big-endian
最低有效位(most significant byte)落在高地址
這是目前 RISC 指令集架構(gòu) (RISC、MIPS) 用的字節(jié)序
也是我們看起來比較順的字節(jié)序
這兩個(gè)單詞怎么來的呢?
big-endian
little-endian
詞匯來源
主要指的是磕雞蛋的時(shí)候用哪個(gè)頭磕
大頭
小頭?
出現(xiàn)于《格列佛游記》
小人國為水煮蛋爭論
爭論的雙方分別被稱為“大端派”和“小端派”
以下是1726年關(guān)于大小端之爭歷史的描述
“我下面要告訴你的是,Lilliput和Blefuscu這兩大強(qiáng)國在過去36個(gè)月里一直在苦戰(zhàn)。戰(zhàn)爭開始是由于以下的原因:我們大家都認(rèn)為,吃雞蛋前,原始的方法是打破雞蛋較大的一端,可是當(dāng)今皇帝的祖父小時(shí)候吃雞蛋,一次按古法打雞蛋時(shí)碰巧將一個(gè)手指弄破了。因此他的父親,當(dāng)時(shí)的皇帝,就下了一道敕令,命令全體臣民吃雞蛋時(shí)打破雞蛋較小的一端,違令者重罰。老百姓們對(duì)這項(xiàng)命令極其反感。歷史告訴我們,由此曾經(jīng)發(fā)生過6次叛亂,其中一個(gè)皇帝送了命,另一個(gè)丟了王位。這些叛亂大多都是由Blefuscu的國王大臣們煽動(dòng)起來的。叛亂平息后,流亡的人總是逃到那個(gè)帝國去尋求避難。據(jù)估計(jì),先后幾次有11000人情愿受死也不肯去打破雞蛋較小的一端。關(guān)于這一爭端,曾出版過幾百本大部著作,不過大端派的書一直是受禁的,法律也規(guī)定該派任何人不得做官?!?/blockquote>這很像甜咸豆腐腦的爭論
無關(guān)對(duì)錯(cuò)
只是個(gè)人習(xí)慣
能兩種都吃的話
可以 增加食物多樣性
我個(gè)人鄭重推薦
加 韭菜花和辣椒油 少許
后續(xù)
1980年
Danny Cohen
一位網(wǎng)絡(luò)協(xié)議的早期開發(fā)者
在其著名的論文"On Holy Wars and a Plea for Peace"中
為平息一場關(guān)于字節(jié)該以什么樣的順序傳送的爭論
而第一次引用了該詞
python默認(rèn)用的是
什么字節(jié)序呢?
python默認(rèn)字節(jié)序
python默認(rèn)用
小端字節(jié)序
生活細(xì)節(jié)
除了磕雞蛋之外
雞蛋放置也很有講究
放置雞蛋
要按照雞蛋 自身的規(guī)律
按規(guī)律辦事
大頭里面 有空氣
大頭朝上 放的時(shí)間久一點(diǎn)
磕雞蛋的時(shí)候
應(yīng)該是磕哪頭呢?
磕雞蛋的細(xì)節(jié)
雞蛋有內(nèi)膜 叫做鳳凰衣
可以外用
也可以內(nèi)用
粉碎性地磕雞蛋外殼
連同雞蛋內(nèi)膜一起剝出來
可以從小頭附近 剝雞蛋殼
手法要輕柔
否則 雞蛋殼會(huì)感覺到疼
尋道
跳出大頭小頭二元對(duì)立
找到正確方法
完成任務(wù)
禪意
不產(chǎn)生絕對(duì)判斷
不產(chǎn)生路徑依賴
不斷研究感受
找到最好的方法
隨時(shí)接受教訓(xùn)
靈活應(yīng)變
對(duì)自己的學(xué)習(xí)率敏感
總結(jié)
這次我們研究了字節(jié)序
字節(jié)序有兩種
符號(hào)英文名稱中文名稱<
little-endian小字節(jié)序>
big-endian大字節(jié)序字節(jié)序 用來
明確 整型數(shù)字存儲(chǔ)的 順序
如果 讀寫數(shù)字出了錯(cuò)
是否 ?字節(jié)序出了問題
可以 考慮一下
變量現(xiàn)在可以
聲明
初始化
存儲(chǔ)了
但是 變量
又應(yīng)該如何刪除
呢???
下次再說??
藍(lán)橋->https://www.lanqiao.cn/courses/3584
github->https://github.com/overmind1980/oeasy-python-tutorial
gitee->https://gitee.com/overmind1980/oeasypython
下面兩個(gè)不同的字節(jié)次序
0x12345678
對(duì)應(yīng)同一個(gè)數(shù)字
BigEndian
從低地址開始
在高地址結(jié)束
也就是地址數(shù)值大的地方結(jié)束
所以叫BigEndian
LittleEndian
從高地址開始
在低地址結(jié)束
也就是地址數(shù)值小的地方結(jié)束
所以叫LittleEndian
<h 用的是小字節(jié)序
編碼模式屬于 little-endian
最低有效位(least significant byte)放在低地址 a
這是目前常用的指令集架構(gòu) ($x86、x86-64$) 用的字節(jié)序
CISC(復(fù)雜指令集)
另一種字節(jié)序是大字節(jié)序
應(yīng)用于 RISC(精簡指令集)
h ?是按下圖中的字節(jié)排序
編碼模式屬于 big-endian
最低有效位(most significant byte)落在高地址
這是目前 RISC 指令集架構(gòu) (RISC、MIPS) 用的字節(jié)序
也是我們看起來比較順的字節(jié)序
這兩個(gè)單詞怎么來的呢?
big-endian
little-endian
主要指的是磕雞蛋的時(shí)候用哪個(gè)頭磕
大頭
小頭?
出現(xiàn)于《格列佛游記》
小人國為水煮蛋爭論
爭論的雙方分別被稱為“大端派”和“小端派”
以下是1726年關(guān)于大小端之爭歷史的描述
這很像甜咸豆腐腦的爭論
無關(guān)對(duì)錯(cuò)
只是個(gè)人習(xí)慣
能兩種都吃的話
可以 增加食物多樣性
我個(gè)人鄭重推薦
加 韭菜花和辣椒油 少許
后續(xù)
1980年
Danny Cohen
一位網(wǎng)絡(luò)協(xié)議的早期開發(fā)者
在其著名的論文"On Holy Wars and a Plea for Peace"中
為平息一場關(guān)于字節(jié)該以什么樣的順序傳送的爭論
而第一次引用了該詞
python默認(rèn)用的是
什么字節(jié)序呢?
python默認(rèn)字節(jié)序
python默認(rèn)用
小端字節(jié)序
生活細(xì)節(jié)
除了磕雞蛋之外
雞蛋放置也很有講究
放置雞蛋
要按照雞蛋 自身的規(guī)律
按規(guī)律辦事
大頭里面 有空氣
大頭朝上 放的時(shí)間久一點(diǎn)
磕雞蛋的時(shí)候
應(yīng)該是磕哪頭呢?
磕雞蛋的細(xì)節(jié)
雞蛋有內(nèi)膜 叫做鳳凰衣
可以外用
也可以內(nèi)用
粉碎性地磕雞蛋外殼
連同雞蛋內(nèi)膜一起剝出來
可以從小頭附近 剝雞蛋殼
手法要輕柔
否則 雞蛋殼會(huì)感覺到疼
尋道
跳出大頭小頭二元對(duì)立
找到正確方法
完成任務(wù)
禪意
不產(chǎn)生絕對(duì)判斷
不產(chǎn)生路徑依賴
不斷研究感受
找到最好的方法
隨時(shí)接受教訓(xùn)
靈活應(yīng)變
對(duì)自己的學(xué)習(xí)率敏感
總結(jié)
這次我們研究了字節(jié)序
字節(jié)序有兩種
<
little-endian小字節(jié)序>
big-endian大字節(jié)序字節(jié)序 用來
明確 整型數(shù)字存儲(chǔ)的 順序
如果 讀寫數(shù)字出了錯(cuò)
是否 ?字節(jié)序出了問題
可以 考慮一下
變量現(xiàn)在可以
聲明
初始化
存儲(chǔ)了
但是 變量
又應(yīng)該如何
刪除
呢???下次再說??
藍(lán)橋->https://www.lanqiao.cn/courses/3584
github->https://github.com/overmind1980/oeasy-python-tutorial
gitee->https://gitee.com/overmind1980/oeasypython