大端:較高的有效位元組存放在較低的儲存器位址,較低的有效位元組存放在較高的儲存器位址。
小端:較高的有效位元組存放在較高的的儲存器位址,較低的有效位元組存放在較低的儲存器位址。
如果將乙個32位的整數0x12345678存放到乙個整型變數(int)中,這個整型變數採用大端或者小端模式在記憶體中的儲存由下表所示。為簡單起見,本文使用op0表示乙個32位資料的最高位元組msb(most significant byte),使用op3表示乙個32位資料最低位元組lsb(least significant byte)。
位址偏移
大端模式
小端模式
0x00
12(op0)
78(op3)
0x01
34(op1)
56(op2)
0x02
56(op2)
34(op1)
0x03
78(op3)
12(op0)
如果將乙個16位的整數0x1234存放到乙個短整型變數(short)中。這個短整型變數在記憶體中的儲存在大小端模式由下表所示:
位址偏移
大端模式
小端模式
0x00
12(op0)
34(op1)
0x01
34(op1)
12(op0)
由上表所知,採用大小模式對資料進行存放的主要區別在於在存放的位元組順序,大端方式將高位存放在低位址,小端方式將高位存放在高位址。採用大端方式進行資料存放符合人類的正常思維,而採用小端方式進行資料存放利於計算機處理。到目前為止,採用大端或者小端進行資料存放,其孰優孰劣也沒有定論。
struct語句
格式pack(fmt, v1, v2, …)
按照給定的格式(fmt),把資料封裝成字串(實際上是類似於c結構體的位元組流)
unpack(fmt, string)
按照給定的格式(fmt)解析位元組流string,返回解析出來的tuple
calcsize(fmt)
計算給定的格式(fmt)占用多少位元組的記憶體
struct中支援的格式如下表:
format
c type
python
位元組數x
pad byte
no value1c
char
string of length 11b
signed char
integer1b
unsigned char
integer1?
_bool
bool1h
short
integer2h
unsigned short
integer2i
intinteger4i
unsigned int
integer or long4l
long
integer4l
unsigned long
long4q
long long
long8q
unsigned long long
long8f
float
float4d
double
float8s
char
string1p
char
string1p
void *
long
為了同c中的結構體交換資料,還要考慮有的c或c++編譯器使用了位元組對齊,通常是以4個位元組為單位的32位系統,故而struct根據本地機器位元組順序轉換.可以用格式中的第乙個字元來改變對齊方式.定義如下:
character
byte order
size and alignment
@native
native
=native standard
按原位元組數
<
little-endian
standard 按原位元組數
>
big-endian
standard 按原位元組數
!network (= big-endian)
standard 按原位元組數
fmt:內容解析格式,其中b表示的是乙個位元組, > 表示的是大端法則,content_numb表示的是多少個位元組。
c 批量製作或者解壓MNIST資料集
在深度學習入門過程中,一般以mnist資料集入手,因此經常需要將自己的資料集壓縮成mnist格式形式帶入源 中進行訓練,同時mnist資料集為二值化影象,如果自己的資料集為rgb三通道影象,應該怎麼壓縮資料集影象成為mnist格式,c 指令碼 如下 1 標頭檔案 pragma once ifndef...
mnist手寫數字集製作tfrecords資料格式
tfrecords是一種二進位制檔案,可先將與標籤製作成該格式的檔案,使用tfrecords進行資料讀取,會提高記憶體利用率,將不同輸入檔案統一起來。檔案生成的過程 具體 如下 def generate tfrecord i ists os.path.exists data path 判斷儲存路徑是...
MNIST 資料 分類
分類和回歸的區別在於輸出變數的型別上。通俗理解定量輸出是回歸,或者說是連續變數 定性輸出是分類,或者說是離散變數 如 房價這是乙個回歸任務 把東西分成幾類,比如貓狗豬牛,就是乙個分類任務。1 import tensorflow as tf 2import numpy as np 3from tens...