亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#使用BitConverter與BitArray類(lèi)進(jìn)行預(yù)定義基礎(chǔ)類(lèi)型轉(zhuǎn)換

 更新時(shí)間:2022年05月19日 10:34:38   作者:springsnow  
這篇文章介紹了C#使用BitConverter與BitArray類(lèi)進(jìn)行預(yù)定義基礎(chǔ)類(lèi)型轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、BitConverter 將預(yù)定義的基礎(chǔ)類(lèi)型與字節(jié)數(shù)據(jù)進(jìn)行互轉(zhuǎn)(Unicode)

1、將值類(lèi)型轉(zhuǎn)成字節(jié)數(shù)組(Unicode):BitConverter.GetBytes()

byte[] data = BitConverter.GetBytes('哈');
Console.Write(data);//200,84 (兩個(gè)字節(jié))
Console.Write(BitConverter.GetBytes('1'));//49,0 (兩個(gè)字節(jié))
Console.Write(BitConverter.GetBytes(258));//2,1,0,0  (整數(shù),32位,四個(gè)字節(jié))
Console.Write(BitConverter.GetBytes(1.2));//8個(gè)元素 (八個(gè)字節(jié))
Console.Write(BitConverter.GetBytes(true));//1 (一個(gè)字節(jié))

2、將字節(jié)數(shù)組轉(zhuǎn)成值類(lèi)型:BitConverter.ToXXX()

char str = BitConverter.ToChar(new byte[] { 200, 84 }, 0);
Console.Write(str);//哈
short sho = BitConverter.ToInt16(new byte[] { 69, 0 }, 0);
Console.Write(sho.ToString());//69

3、將字節(jié)數(shù)組中每個(gè)元素值轉(zhuǎn)成十六進(jìn)制表示:BitConverter.ToString(byte[])

string strHex = BitConverter.ToString(new byte[] { 09, 45, 65, 0, 0 });
Console.Write(strHex);//09-2D-41-00-00
string strHex = BitConverter.ToString(new byte[] { 69, 0, 0, 0, 0 });
Console.Write(strHex);//45-00-00-00-00

注意:跟BitConverter.IsLittleEndian屬性有關(guān),true表示最大的有效字節(jié)位于單詞的右端。

4、舉例說(shuō)明:

整數(shù)

對(duì)應(yīng)的十六進(jìn)制數(shù) 
(Convert.ToString(**, 16) )

轉(zhuǎn)成字節(jié)數(shù)組byte[] 
BitConverter.GetBytes(**)

字節(jié)數(shù)據(jù)每個(gè)字節(jié)對(duì)應(yīng)的十六進(jìn)制表示 
BitConverter.ToString(**)

11:0x01 (兩位兩位地對(duì)齊)[1,0,0,0]01- 00- 00 -00
6554010004:0x1 00 04 (兩位兩位地對(duì)齊)[4,0,1,0]04- 00- 01 -00
9999999993B9AC9FF:0x3B9AC9FF (兩位兩位地對(duì)齊)[255,201,154,59]FF -C9- 9A -3B

二、字符與ASCII碼轉(zhuǎn)化:

一個(gè)ASCII碼占一個(gè)字節(jié),其中一個(gè)為檢驗(yàn)位。共27=128個(gè)字符,只適合所有的拉丁字母。

1、字符轉(zhuǎn)成ASCII碼:

Console.Write(Convert.ToByte('a'));//97
Console.Write((int)'a');//97,強(qiáng)制轉(zhuǎn)換
Console.Write(Convert.ToByte('1'));//49
Console.Write((int)'1');//49

2、ASCII碼轉(zhuǎn)成字符:

Convert.ToChar(97)=>'d';  
(char)97='a' --強(qiáng)制轉(zhuǎn)換:

注意:C#中的Char字符類(lèi)型為Unicode類(lèi)型,每個(gè)字符占2個(gè)字節(jié)。

三、字符串與十六進(jìn)制表示的字節(jié)數(shù)組之間的轉(zhuǎn)換

void Main()
 {
     Console.WriteLine(StrToHex("哈啊a的1我z!"));
     Console.WriteLine(HexToStr("B9 FE B0 A1 61 B5 C4 31 CE D2 7A 21"));
 }

//字符串轉(zhuǎn)換成十六進(jìn)制字符串
public string StrToHex(string mStr)
 {
     return BitConverter.ToString(ASCIIEncoding.Default.GetBytes(mStr)).Replace("-", " ");
 }
 // 十六進(jìn)制字符串轉(zhuǎn)換成字符串
public string HexToStr(string mHex)
 {
     mHex = mHex.Replace(" ", "");
     if (mHex.Length <= 0) return "";
     byte[] vBytes = new byte[mHex.Length / 2];
     for (int i = 0; i < mHex.Length; i += 2)
         if (!byte.TryParse(mHex.Substring(i, 2), NumberStyles.HexNumber, null, out vBytes[i / 2]))
             vBytes[i / 2] = 0;
     return ASCIIEncoding.Default.GetString(vBytes);
 }

四、BitArray類(lèi)

BitArray類(lèi)用來(lái)處理位集合。位集合是可以用來(lái)有效表示Boolean值的集合。注意:表示True/False的集合,不是0、1集合。

如:對(duì)常規(guī)數(shù)的二進(jìn)制的顯示或存儲(chǔ):

0 0 0 0 0 0 0 1

而對(duì)于在BitArray里的存儲(chǔ),它是如下格式:

True False False False False False False False

它的順序是相反的,而且用布爾值很難便捷讀懂,但實(shí)際上,我們應(yīng)當(dāng)把數(shù)值當(dāng)作1和0這樣直觀的顯示出來(lái),并且順序也要進(jìn)行處理!

解決方法:BitArray里顯示的格式是逆序的,并且每一位都用布爾值顯示,我們無(wú)法改變BitArray類(lèi)所用的內(nèi)部代碼,但我們可以編寫(xiě)外部代碼,使它能夠更加友好的便于理解的常規(guī)的方式顯示出來(lái)。

屬性

  • Count 獲取 BitArray 中包含的元素個(gè)數(shù)。
  • IsReadOnly 獲取一個(gè)值,表示 BitArray 是否只讀。
  • Item 獲取或設(shè)置 BitArray 中指定位置的位的值。
  • Length 獲取或設(shè)置 BitArray 中的元素個(gè)數(shù)。

方法

  • BitArray And( BitArray value ); 對(duì)當(dāng)前的 BitArray 中的元素和指定的 BitArray 中的相對(duì)應(yīng)的元素執(zhí)行按位與操作。
  • bool Get( int index ); 獲取 BitArray 中指定位置的位的值。
  • BitArray Not();把當(dāng)前的 BitArray 中的位值反轉(zhuǎn),以便設(shè)置為 true 的元素變?yōu)?false,設(shè)置為 false 的元素變?yōu)?true。
  • BitArray Or( BitArray value ); 對(duì)當(dāng)前的 BitArray 中的元素和指定的 BitArray 中的相對(duì)應(yīng)的元素執(zhí)行按位或操作。
  • void Set( int index, bool value ); 把 BitArray 中指定位置的位設(shè)置為指定的值。
  • void SetAll( bool value ); 把 BitArray 中的所有位設(shè)置為指定的值。
  • BitArray Xor( BitArray value ); 對(duì)當(dāng)前的 BitArray 中的元素和指定的 BitArray 中的相對(duì)應(yīng)的元素執(zhí)行按位異或操作。
  • CopyTo(Array, Int32) 從目標(biāo)數(shù)組的指定索引處開(kāi)始將整個(gè) BitArray 復(fù)制到兼容的一維 Array。

舉例:

下面創(chuàng)建一個(gè)字節(jié)數(shù)組,里面包含5個(gè)byte。

int bits;
string[] binNumber = new string[8];//
int binary;
byte[] ByteSet = new byte[] { 1, 2, 3, 4, 5 };//定義一個(gè)字節(jié)型數(shù)組,存5個(gè)字節(jié)型數(shù)值:1,2,3,4,5,6
BitArray BitSet = new BitArray(ByteSet);//這里一定要注意,這里的每一個(gè)字節(jié)型數(shù)值是以位的形式、每一位用Boolean值、逆序存儲(chǔ)在BitArray(1字節(jié)對(duì)應(yīng)8位)
bits = 0;//bits是計(jì)數(shù)器,到8了就又歸為初始值0;為的是方便知道操作完了一個(gè)字節(jié)型數(shù)值(1字節(jié)正好占8位)
binary = 7;//binary是二進(jìn)制數(shù)組下標(biāo)索引;初始值為7,這是因?yàn)锽itArray里存儲(chǔ)的數(shù)據(jù)和常規(guī)二進(jìn)制數(shù)據(jù)的順序是相反的
Console.WriteLine("BitSet里包含的元素?cái)?shù)" + BitSet.Count);//40,因?yàn)閿?shù)據(jù)在BitArray里是以位的形式存儲(chǔ)的,5個(gè)字節(jié)型數(shù)值,一個(gè)字節(jié)占8位,所以共占40位?。?!不是5?。?!
for (int i = 0; i <= BitSet.Count - 1; i++)//遍歷40個(gè)位,每個(gè)位存boolean值True/False
{
    Console.WriteLine("BitSet.Get(" + i + ")" + BitSet.Get(i));
    if (BitSet.Get(i) == true)
        binNumber[binary] = "1";//如果該位存儲(chǔ)的true值,則轉(zhuǎn)成1;
    else
        binNumber[binary] = "0";//如果該位存儲(chǔ)的false值,則轉(zhuǎn)成0;
    bits++;      //計(jì)數(shù)+1
    binary--;    //eg.第8位(下標(biāo)7)存好,則將下標(biāo)向左移1位存下一輪將位布爾值轉(zhuǎn)成的二進(jìn)制0/1

    if ((bits % 8) == 0)//當(dāng)計(jì)數(shù)器為8時(shí),表示一個(gè)字節(jié)型的數(shù)值已經(jīng)表示完全了
    {
        binary = 7;//將存儲(chǔ)字節(jié)型數(shù)值的二進(jìn)制形式的String型數(shù)組的下標(biāo)歸初始
        bits = 0;
        for (int j = 0; j <= 7; j++)
            Console.Write(binNumber[j]);
        Console.WriteLine();
    }
}

結(jié)果:

取整型數(shù)組來(lái)試一試,整型數(shù)組是4字節(jié),32位

int bits = 0;
int index = 31;
string[] s = new string[32];
int[] a = new int[] { 2, 3, 2, 7, 2147483647 };
BitArray BA = new BitArray(a);

Console.WriteLine("BA的大小:" + BA.Count);  //5*4*8=160

for (int i = 0; i < BA.Count; i++)
{
    Boolean b = BA.Get(i);
    if (b == true)
        s[index] = "1";
    else
        s[index] = "0";
    bits++;
    index--;
    if (bits % 32 == 0) //每隔一個(gè)數(shù)字(4*8)換行
    {
        bits = 0;
        index = 31;
        for (int j = 0; j <= 31; j++)
            Console.Write(s[j]);
        Console.WriteLine();
    }
}

結(jié)果:

到此這篇關(guān)于C#使用BitConverter與BitArray類(lèi)進(jìn)行預(yù)定義基礎(chǔ)類(lèi)型轉(zhuǎn)換的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實(shí)現(xiàn)圖形區(qū)域組合操作的方法

    C#實(shí)現(xiàn)圖形區(qū)域組合操作的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)圖形區(qū)域組合操作的方法,涉及C#操作圖片實(shí)現(xiàn)組合操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 綁定winform中DataGrid

    綁定winform中DataGrid

    綁定winform中DataGrid,需要的朋友可以參考一下
    2013-02-02
  • C#編寫(xiě)游戲客戶(hù)端的實(shí)現(xiàn)代碼

    C#編寫(xiě)游戲客戶(hù)端的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C#編寫(xiě)游戲客戶(hù)端的實(shí)現(xiàn)代碼,連接客戶(hù)端原理流程圖,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • c# 委托詳解

    c# 委托詳解

    本文將通過(guò)實(shí)例解析對(duì)c# 委托進(jìn)行詳細(xì)介紹,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C#第三方日志插件Log4net的配置文件詳解

    C#第三方日志插件Log4net的配置文件詳解

    Log4net是一個(gè)穩(wěn)定且功能豐富的日志庫(kù),已經(jīng)存在多年并且被廣泛使用,這篇文章主要為大家詳細(xì)介紹了Log4net日志插件的配置文件信息,感興趣的可以了解下
    2024-03-03
  • C#實(shí)現(xiàn)拆分合并Word表格中的單元格

    C#實(shí)現(xiàn)拆分合并Word表格中的單元格

    我們?cè)谑褂肳ord制作表格時(shí),由于表格較為復(fù)雜,只是簡(jiǎn)單的插入行、列并不能滿(mǎn)足我們的需要。要做一個(gè)完整的表格,很多時(shí)候需要將單元格進(jìn)行拆分或者合并。本文將詳細(xì)為您介紹在Word表格中拆分或合并單元格的思路及方法,希望對(duì)大家有所幫助
    2022-12-12
  • C#中Selenium?WebDriver的常用操作小結(jié)

    C#中Selenium?WebDriver的常用操作小結(jié)

    這篇文章主要為大家詳細(xì)介紹了C#中Selenium?WebDriver的常用操作,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下
    2024-01-01
  • C#獲取打印機(jī)列表方法介紹

    C#獲取打印機(jī)列表方法介紹

    這篇文章介紹了C#獲取打印機(jī)列表的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C# yield在WCF中的錯(cuò)誤用法(一)

    C# yield在WCF中的錯(cuò)誤用法(一)

    這篇文章主要介紹了C# yield在WCF中的錯(cuò)誤使用(一),本文講解的內(nèi)容據(jù)說(shuō)是99%的開(kāi)發(fā)人員都有可能犯的錯(cuò)誤,需要的朋友可以參考下
    2015-04-04
  • 輕松學(xué)習(xí)C#的運(yùn)算符

    輕松學(xué)習(xí)C#的運(yùn)算符

    輕松學(xué)習(xí)C#的運(yùn)算符,對(duì)C#的運(yùn)算符感興趣的朋友可以參考本篇文章,幫助大家更靈活的運(yùn)用C#的運(yùn)算符
    2015-11-11

最新評(píng)論