IRONSOFTWAREHOME

在C#中儲存和顯示二進制值

在C#中儲存和顯示二進制值

Tim Corey

9m 20s

二進制是計算機實際儲存和處理資料的方式,但C#預設使用十進制顯示螢幕上的一切。 如果您正在處理位標誌、網路協議、硬體寄存器,或者只是試圖了解在機器層級上數字是如何表示的,您需要知道如何將二進制值導入C#並以可讀格式顯示它們。

在他的影片"在C#中儲存和顯示二進制值"中,Tim Corey講述了他的二進制系列中的第三課。 他演示了如何使用0b前綴儲存二進制字面值,如何使用Convert.ToString()將整數轉換為其二進制字串表示,還演示了如何在輸出中新增前導零以實現格式化清晰。 如果您在跟隨二進制系列或在C#中處理底層資料,這涵蓋了實際的機制。

在C#中儲存二進制字面值

[0:00 - 1:50] Tim處理的第一個問題很直截了當:如何將二進制數字放入C#變數中? 答案是使用0b前綴,它告訴編譯器將數位解釋為二進制而不是預設的十進制。

// Store binary 1001 (which is 9 in decimal)
int binaryValue = 0b1001;
C#

如果沒有前綴,1001將被解釋為一千零一。 使用0b時,它被視為四個二進制數位,代表十進制值9。前導零是可選的。 撰寫0b00001001與0b1001相同,但較長的形式可以在處理特定位寬時使位位置更容易讀懂。

變數型別是標準的int。 如果您不需要負值,您也可以使用uint(無符號整數),或使用long儲存64位資料。 二進制字面值語法適用於任何整數型別。

以二進制顯示數字

[1:50 - 3:48] 儲存二進制值是一回事。 以二進制顯示在螢幕上是另一回事。 當您列印int與Console.WriteLine時,C#輸出的是十進制表示。 對於0b1001,這意味著您看到的是9,而不是1001。

要獲得二進制字串表示,請使用Convert.ToString()並帶有一個基準參數:

int binaryValue = 0b1001;

// Convert to binary string (base 2)
string representation = Convert.ToString(binaryValue, 2);

Console.WriteLine($"Base 10: {binaryValue}");      // Output: 9
Console.WriteLine($"Base 2: {representation}");     // Output: 1001
C#

Convert.ToString()的第二個參數指定輸出基準。 支持的值有2(二進制)、8(八進制)、10(十進制)和16(十六進制)。 Tim示範了二進制的使用,但相同的方法適用於所有四種。

用前導零填充

[3:48 - 5:24] Convert.ToString(binaryValue, 2)的原始輸出省略了前導零。 對於0b1001,結果是字串"1001",而不是"00001001"。 當您處理位元組(8位)、16位值或32位寄存器時,看到完整的寬度及前導零使位位置立即清晰。

解決方法是PadLeft()

// Pad to 8 characters (one byte) with leading zeros
string padded = Convert.ToString(binaryValue, 2).PadLeft(8, '0');

Console.WriteLine(padded);  // Output: 00001001
C#

PadLeft(8, '0')確保輸出至少有8個字元長,將缺失的位置用字元'0'填充。 Tim指出的細節是第二個參數是一個字元(單引號),而不是字串。 這是字元零,不是數字零,因為PadLeft從個別字元構建字串。

對於16位表示,將8變為16。對於完整的32位整數,使用32。填充寬度應與您正在使用的位寬度匹配。

將任何整數轉換為二進制

[5:24 - 7:28] Tim提出了一個容易被忽視的觀點:您不必將值儲存為二進制字面值即可看到其二進制表示。 任何整數都可以使用同樣的Convert.ToString()方法轉換成二進制輸出:

// A regular base 10 integer
int decimalValue = 12;

// Convert to padded binary string
string binary = Convert.ToString(decimalValue, 2).PadLeft(8, '0');

Console.WriteLine($"Decimal: {decimalValue}");  // Output: 12
Console.WriteLine($"Binary: {binary}");          // Output: 00001100
C#

0b前綴是當您已有二進制值並想以二進制形式輸入時使用。 對於普通整數,Convert.ToString()處理轉換。 對於相同的基本值,這兩種方式的結果相同。

C#如何在記憶體中儲存整數

[7:28 - 9:20] Tim以C#如何內部儲存整數的細節結尾。 在C#中,int是System.Int32的別名,是一個32位有符號整數。 這意味著每個int在記憶體中佔用32位,不管值有多小。 儲存0b1001(數字9)使用與儲存0b01111111111111111111111111111111(超過二十億)相同的32位。

// What's actually stored in memory for binaryValue = 0b1001
// 00000000 00000000 00000000 00001001
string fullRepresentation = Convert.ToString(binaryValue, 2).PadLeft(32, '0');
Console.WriteLine(fullRepresentation);
C#

這與為什麼選擇正確的型別大小很重要有聯繫。 一個long(Int64)使用64位,使記憶體佔用翻倍。 對於大多數應用程式,int(32位)涵蓋您需要的範圍。 但如果您在記憶體受限的環境中工作或處理數百萬個值,byte(8位)、short(16位)、int(32位)和long(64位)之間的差異就變得重要。

結束:完整模式

[9:07 - 9:15] 在C#中處理二進制的完整模式很簡潔。當有二進制輸入時,使用0b前綴儲存值。 使用Convert.ToString(value, 2)顯示它們以獲取原始輸出。 當需要固定寬度格式時,新增.PadLeft(width, '0')。 並記住,底層儲存始終是一個標準整數型別,位寬取決於您選擇的byte、short、int或long。

結論

[9:15 - 9:20] 總結一下:二進制字面值使用0b前綴,PadLeft()新增前導零以進行固定寬度顯示。 值在內部是以常規整數型別儲存,而int始終佔用32位,無論數字大小如何。

這些構建塊將出現在系列中的下一個課程中,那裡需要正確格式化二進制值以進行位運算。

範例提示:在除錯位運算時,將二進制輸出填充到型別的全寬(byte的8位,short的16位,int的32位)。 一次看到所有的位位置使得位移和遮罩操作更容易追蹤。 像string ToBinary(int val) => Convert.ToString(val, 2).PadLeft(32, '0');這樣的輔助方法可以節省重複輸入。

在他的YouTube頻道觀看完整影片,獲得更多有關理解C#中二進制的見解。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立