亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將十進制轉換為二進制組合(自定義長度)

將十進制轉換為二進制組合(自定義長度)

C#
慕的地8271018 2022-01-15 17:31:22
我需要將幾個十進制數字(或字符串或 1 和 0)轉換為二進制組合。在 .NET 中,我看到許多使用 Byte 的庫。字節是對 8 位的操作。在我的情況下,我必須使用需要連接在一起的一組 3 位。例如:對于過濾器或分區,我有一個 3 位置位。我應該用什么來幫助我進行這種轉換?此時我嘗試理解 BitArray 但我不明白如何創建特定大小的位然后輕松填充它們。這是我已經做過的    BitArray headerBits = new BitArray(new bool[] { false, false, true, true, false, false, false, false }); // 8    BitArray filterBits = new BitArray(new bool[] { false, true, true });  // 11    BitArray PartitionBits = new BitArray(new bool[] { true, false, true });  // 14    BitArray CompanyPrefixBits = new BitArray(new bool[] { false, false }); // 16讓我們試試這 16 個第一位。我想要的結果是3074編輯 - - -BitArray headerBits = new BitArray(new bool[] { false, false, true, true, false, false, false, false }); // 8BitArray filterBits = new BitArray(new bool[] { false, true, true });  // 11BitArray PartitionBits = new BitArray(new bool[] { true, false, true });  // 14BitArray CompanyPrefixBits = new BitArray(new bool[] { false, false }); // 16BitArray newBitArray = new BitArray(headerBits.Cast<bool>().Concat(filterBits.Cast<bool>()).Concat(PartitionBits.Cast<bool>()).Concat(CompanyPrefixBits.Cast<bool>()).ToArray());var byteArray = newBitArray.ToByteArray();Console.WriteLine($"{BitConverter.ToString(byteArray, 0)}");// Result is 0C-2E// I expect 30-74這怎么可能?
查看完整描述

2 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

我試圖理解 BitArray 但我不明白如何創建特定大小的位然后輕松填充它們。


BitArray有幾個構造函數。最明顯的是BitArray從bool數組創建:


var bits = new BitArray(new[] { true, false, true, true });

另一種方法是僅通過 size 構造函數創建一個未初始化BitArray的,然后逐個設置位:


var bits = new BitArray(4); // 4 bits, all false for now

for (int i = 0; i < bits.Length; i++)

    bits[i] = GetMyNextBit();

更新:


如果您的主要問題是將連接的位轉換為字節,則最好BitArray對所有字段使用一個大的。


設置所有位后,您可以使用此擴展方法:


public static byte[] ToByteArray(this BitArray bits)

{

    byte[] result = new byte[(bits.Length - 1) / 8 + 1];

    bits.CopyTo(result, 0);

    return result;

}

我只對十六進制感興趣


您可以輕松地將字節轉換為十六進制字符串:


var result = new StringBuilder(bytes.Length * 2);

for (int i = 0; i < bytes.Length; i++)

    result.Append(bytes[i].ToString("X2"));


查看完整回答
反對 回復 2022-01-15
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

我看到您正在從 RFID 標簽讀取數據。所有數據都可以被視為一系列字節,因此示例使用字節。

如果要將數據顯示為十六進制格式的字符串,那么我建議您將數據讀入數組然后使用

System.Convert.ToString(data, base);

其中 data 是您的 16 位值,base 可以是 2,8,10,16 表示二進制、八進制、十進制或十六進制。


查看完整回答
反對 回復 2022-01-15
  • 2 回答
  • 0 關注
  • 208 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號