C 位元組(陣列)與位之間的計算

2021-10-04 22:41:03 字數 2517 閱讀 5826

運算名稱

運算符號

左移<<

右移》與&

或|非^

例如:

uint32 mini = 0x000ed0ff;

uint16 low16 = (uint16)(mini & 0xffff);

uint16 hight16 = (uint16)((mini>>16) & 0xffff);

byte low16lowbyte = (byte)(mini & 0xff);

byte low16highbyte = (byte)((mini >> 8) & 0xff);

byte high16lowbyte = (byte)(mini>>16 & 0xff);

byte high16highbyte = (byte)((mini >> 24) & 0xff);

擴充套件總結:

擷取資料時,從資料來源中的x位(計數從0開始)開始,連續擷取y位。

公式為:

目標資料型別 result =(強轉為目標型別)((資料來源》x)&yhex)

注:yhex表示將y個1(2進製)轉換成16進製制

例如:從乙個32位無符號資料:0x000ed0ff中的第2位開始,擷取11位的資料為:

uint16 res = (uint16)((mini >> 2) & 0x07ff);
在實際應用開發過程中,我們需要解析和拼裝資料,拼裝資料多數情況下是將不規則的資料組裝成規整的位元組陣列。下面我們研究下如何將多個資訊拼裝到某乙個位元組或者多個連續位元組中。

將下面三個資料拼裝到單個位元組中。

byte a ,byte b , byte c。

其組裝到目標位元組的結構如下表所示:76

5432

10aa

aa-b

-ca占用高4位,b占用第2位,c占用第0位

示例**如下所示:

// 1.獲取待拼接資料

byte a = 0x09;

byte b = 0x01;

byte c = 0x01;

// 2.將拼接資料按位切分(保證資料完整性,防止溢位),然後移動到目標位

byte hh = (byte)((a & 0x0f) << 4);

byte mm = (byte)((b & 0x01) << 2);

byte ll = (byte)((c & 0x01) << 0);

// 3.通過或運算「|」拼接

byte result = (byte)(hh | mm | a | ll);

拼接過程如上面**,很清晰地進行了闡述。

強調一點:在第2步中,與運算「&」目的是為了規整資料【保證其結果最大不過後面與上的值】,保證後面在做與運算時,拼接資料的準確性。

目標型別 result =(強轉為目標型別)( ((a1 & ha1) 《其中:

a1=第乙個資料;

hca1=第乙個資料在目標資料中佔位數個1的16進製制數;

ca1=第乙個資料在目標資料中的最低位的座標標記;

a2=第二個資料;

hca2=第二個資料在目標資料中佔位數個1的16進製制數;

ca2=第二個資料在目標資料中的最低位的座標標記;

an=第n個資料;

hcan=第n個資料在目標資料中佔位數個1的16進製制數;

can=第n個資料在目標資料中的最低位的座標標記;

應用:將下面四個資料,分別儲存到乙個包含兩個位元組的位元組陣列中。其格式如下所示76

5432

100-

aabc

ccc1

cccc

cccd

示例**:

byte a = 0x00;

byte b = 0x01;

uint16 c = 0x0921;

byte d = 0x01;

byte result = ;

// 取全部資料 並移動到第乙個位元組【高】的對應位置

uint16 aa = (uint16)((a & 0x03) << 5);

uint16 bb = (uint16)((b & 0x01) << 4);

// 取c的高4位[從第7位開始,取4位],第乙個位元組尾部,不做移動

uint16 hc = (uint16)((c >> 7) & 0x0f);

// 取c的低7位,並左移1位,並移動到第二個位元組【低】的對應位置

uint16 lc = (uint16)((c & 0x7f) << 1);

// 取d的全部資料(1位),第二個位元組尾部,不做移動

uint16 dd = (uint16)((d & 0x01) << 0);

// 【高】位元組

result[0] = (byte)(aa | bb | hc);

// 【低】位元組

result[1] = (byte)(lc | dd);

注意:在拆分c變數時,擷取資料一定要準確。如果左移或者右移0位的操作可以不寫。

C 位元組陣列操作

合併位元組陣列 public static byte combinebytearray byte bytearra return ams.toarray 位元組陣列擷取 32位 public unsafe static byte subbytearray byte src,int begin,int...

C 位元組陣列擷取

c 位元組陣列擷取 如 byte bt new byte 方法一 擷取位數規則 1 擷取2位長度的位元組陣列 用bitconverter.toint16 例如,從第2位開始擷取2個位元組則 bitconverter.toint16 bt,2 2 擷取4位長度的位元組陣列 用bitconverter....

位元組陣列和字元之間互換

定義string變數為str,記憶體流變數為ms,位元陣列為bt 1.字串轉位元陣列 1 byte bt system.text.encoding.default.getbytes 字串 2 byte bt convert.frombase64string 字串 2.字串轉流 1 memorystr...