中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#預定義的基礎類型如何轉換

發布時間:2022-05-10 14:15:36 來源:億速云 閱讀:125 作者:iii 欄目:開發技術

這篇文章主要介紹了C#預定義的基礎類型如何轉換的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C#預定義的基礎類型如何轉換文章都會有所收獲,下面我們一起來看看吧。

一、BitConverter 將預定義的基礎類型與字節數據進行互轉(Unicode)

1、將值類型轉成字節數組(Unicode):BitConverter.GetBytes()

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

2、將字節數組轉成值類型: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、將字節數組中每個元素值轉成十六進制表示: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屬性有關,true表示最大的有效字節位于單詞的右端。

4、舉例說明:

整數

對應的十六進制數 
(Convert.ToString(**, 16) )

轉成字節數組byte[] 
BitConverter.GetBytes(**)

字節數據每個字節對應的十六進制表示 
BitConverter.ToString(**)

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

二、字符與ASCII碼轉化:

一個ASCII碼占一個字節,其中一個為檢驗位。共27=128個字符,只適合所有的拉丁字母。

1、字符轉成ASCII碼:

Console.Write(Convert.ToByte('a'));//97
Console.Write((int)'a');//97,強制轉換
Console.Write(Convert.ToByte('1'));//49
Console.Write((int)'1');//49

2、ASCII碼轉成字符:

Convert.ToChar(97)=>'d';  
(char)97='a' --強制轉換:

注意:C#中的Char字符類型為Unicode類型,每個字符占2個字節。

三、字符串與十六進制表示的字節數組之間的轉換

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

//字符串轉換成十六進制字符串
public string StrToHex(string mStr)
 {
     return BitConverter.ToString(ASCIIEncoding.Default.GetBytes(mStr)).Replace("-", " ");
 }
 // 十六進制字符串轉換成字符串
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類

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

如:對常規數的二進制的顯示或存儲:

0 0 0 0 0 0 0 1

而對于在BitArray里的存儲,它是如下格式:

True False False False False False False False

它的順序是相反的,而且用布爾值很難便捷讀懂,但實際上,我們應當把數值當作1和0這樣直觀的顯示出來,并且順序也要進行處理!

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

屬性

  • Count 獲取 BitArray 中包含的元素個數。

  • IsReadOnly 獲取一個值,表示 BitArray 是否只讀。

  • Item 獲取或設置 BitArray 中指定位置的位的值。

  • Length 獲取或設置 BitArray 中的元素個數。

方法

  • BitArray And( BitArray value ); 對當前的 BitArray 中的元素和指定的 BitArray 中的相對應的元素執行按位與操作。

  • bool Get( int index ); 獲取 BitArray 中指定位置的位的值。

  • BitArray Not();把當前的 BitArray 中的位值反轉,以便設置為 true 的元素變為 false,設置為 false 的元素變為 true。

  • BitArray Or( BitArray value ); 對當前的 BitArray 中的元素和指定的 BitArray 中的相對應的元素執行按位或操作。

  • void Set( int index, bool value ); 把 BitArray 中指定位置的位設置為指定的值。

  • void SetAll( bool value ); 把 BitArray 中的所有位設置為指定的值。

  • BitArray Xor( BitArray value ); 對當前的 BitArray 中的元素和指定的 BitArray 中的相對應的元素執行按位異或操作。

  • CopyTo(Array, Int32) 從目標數組的指定索引處開始將整個 BitArray 復制到兼容的一維 Array。

舉例:

下面創建一個字節數組,里面包含5個byte。

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

    if ((bits % 8) == 0)//當計數器為8時,表示一個字節型的數值已經表示完全了
    {
        binary = 7;//將存儲字節型數值的二進制形式的String型數組的下標歸初始
        bits = 0;
        for (int j = 0; j <= 7; j++)
            Console.Write(binNumber[j]);
        Console.WriteLine();
    }
}

結果:

C#預定義的基礎類型如何轉換

取整型數組來試一試,整型數組是4字節,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) //每隔一個數字(4*8)換行
    {
        bits = 0;
        index = 31;
        for (int j = 0; j <= 31; j++)
            Console.Write(s[j]);
        Console.WriteLine();
    }
}

結果:

C#預定義的基礎類型如何轉換

關于“C#預定義的基礎類型如何轉換”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C#預定義的基礎類型如何轉換”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁海县| 新郑市| 紫金县| 泸定县| 福建省| 越西县| 吉木萨尔县| 乌拉特中旗| 庆阳市| 赞皇县| 万源市| 陵川县| 淮安市| 永胜县| 洛南县| 辽阳县| 宜丰县| 获嘉县| 栖霞市| 邵阳县| 广水市| 贵溪市| 辽阳市| 延寿县| 改则县| 通江县| 根河市| 尼木县| 房产| 曲靖市| 洛阳市| 邵阳县| 枞阳县| 霸州市| 通州市| 海晏县| 古田县| 遂溪县| 思茅市| 民乐县| 东乡|