有效位元組

有效位元組

計算機科學中,有效位元組一般是指計算機讀取數據時,計數器所記錄的計數值。如果在一個計數器中計數值的同時,又要往同一個計數器中寫入新的計數值時,如果不注意先後順序,很容易出錯。所以有效位元組也可以指最高有效位元組和最低有效位元組之間的位元組。

基本介紹

  • 中文名:有效位元組
  • 外文名:Significant Byte
  • 學科:計算機科學
  • 定義:最高有效位元組與最低有效位元組之間
  • 有關術語:最高有效位元組、最低有效位元組
  • 順序:與位元組序有關
  • 發生時間:處理數據
簡介,位元組序,最高有效位元組與最低有效位元組,

簡介

在計算機科學中,有效位元組一般是指計算機讀取數據時,計數器所記錄的計數值。如果在一個計數器中計數值的同時,又要往同一個計數器中寫入新的計數值時,如果不注意先後順序,很容易出錯。所以有效位元組也可以指最高有效位元組和最低有效位元組之間的位元組。有效位元組在計算機進行數據讀取時很重要,特別是計算機進行網路數據傳輸時,定義有效位元組有利於進行數據傳輸雙方正確進行數據傳輸。

位元組序

現代的計算機系統一般採用位元組(Octet, 8 bit Byte)作為邏輯定址單位。當物理單位的長度大於1個位元組時,就要區分位元組序(Endianness),位元組序是指處理器在處理多位元組數據時,在暫存器和記憶體中保存位元組的順序。為了簡便起見它的英文也常常表示為 Byte Order。
目前在各種體系的計算機中通常採用的位元組存儲機制主要有兩種:Little-Endian 和 Big-Endian。另外還有一種不常用的位元組序Middle-Endian,又稱為Mixed-Endian或者PDP-Endian,它是Little-Endian 和 Big-Endian的混合體。
我們常見的大部分處理器都採用Little-Endian,例如x86、6502、Z80、VAX以及PDP-11等;
使用Big-Endian的處理器通常是Motorola的處理器,例如:6800、68000、PowerPC 以及System/370等;像ARM、PowerPC、Alpha、SPARC V9、MIPS、PA-RISC和IA64等體系結構支持可切換的位元組序這樣的特性,這個特性可以提高效率或者簡化網路設備和軟體的邏輯。這種可切換的位元組序被稱為Bi-Endian,用於硬體上意指計算機或者傳遞數據時可以使用兩種不同位元組序中任意一種的能力。
Middle-Endian 使用很少,偶爾會在一些小型機體系中的十進制數的壓縮格式中出現。
大和小端位元組排序
位元組順序
含義
大端
大端表示最大的有效位元組位於單詞的左端。
小端
大端表示最大的有效位元組位於單詞的右端。
通常,您不必擔心您通過網路傳送和接收的數據的位元組序列轉換,但必須將位元組順序的情況。
當必須將位元組順序
需要在以下情況下轉換位元組順序:
您需要通過網路傳遞的信息解釋,而您傳送到另一台數據相對的。例如,您可能將連線埠和網路地址,必須理解。
您進行的伺服器套用不是 MFC 應用程式 (並在沒有它的原始碼)。此調用位元組序列轉換,如果兩台計算機不共享同樣位元組順序。

最高有效位元組與最低有效位元組

MSB(Most Significant Byte),最高有效位元組,指多位元組序列中具有最大權重的位元組,是一個數據中權值最大的那一個位元組。
LSB(Least Significant Byte),最低有效位元組,指多位元組序列中最小權重的位元組,是一個數據中權值最小的那一個位元組。
有效位元組
記憶體地址增大方向
Big-Endian(BE),是指數據的高位元組(MSB)保存在記憶體的低地址中,而數據的低位元組(LSB)保存在記憶體的高地址中,這樣的存儲模式有點兒類似於把數據當作字元串順序處理:地址由小向大增加,而數據從高位往低位放;Little-Endian(LE),是指數據的高位元組(MSB)保存在記憶體的高地址中,而數據的低位元組(LSB)保存在記憶體的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低,和我們的邏輯方法一致。
判斷目標系統的位元組序
 
/*
return value    0 : TRUE  (host boyte order is big-endian)    1 : FALSE  
*/
int isBigEndian(
void
){    union {        
int i; 
/*
 at least 16 bit 
*/        
char
 c;    }un;    un.i = 
0x01; 
/*
 0x01 is LSB 
*/    
return (un.c == 
0x01
);}
網路中位元組序轉換
 
#include <netinet/
in.h>
/*
 將主機位元組序,轉換成網路位元組序,返回網路位元組序的值 
*/
uint16_t htons(uint16_t host16bitvalue);  /* convert short form host to net */uint32_t htonl(uint32_t host32bitvalue);
/*
 將網路位元組序,轉換成主機位元組序,返回主機位元組序的值 
*/
unit16_t ntohs(uint16_t net16bitvalue);uint32_t ntohl(uint32_t net32bitvalue);

相關詞條

熱門詞條

聯絡我們