二進位文本轉換幫助類

来源:http://www.cnblogs.com/liunlls/archive/2016/02/24/Binary-Literal-Helper.html
-Advertisement-
Play Games

http://www.codeproject.com/Tips/1080310/Csharp-Binary-Literal-Helper-Class C#目前不支持二進位數據直接賦值 int bits=0b00010101; 如果可以直接賦值,那麼在按位運算的時候將會帶來很大的方便,所以你可以通過這


http://www.codeproject.com/Tips/1080310/Csharp-Binary-Literal-Helper-Class

  C#目前不支持二進位數據直接賦值

      int bits=0b00010101;

  如果可以直接賦值,那麼在按位運算的時候將會帶來很大的方便,所以你可以通過這個類來達到直接將二進位文本給變數賦值的目的

 1    public static class BinaryLiteral
 2     {
 3         public static byte ToByte(string str)
 4         {
 5             return (byte)ToInt64(str, sizeof(byte));
 6         }
 7 
 8         public static short ToInt16(string str)
 9         {
10             return (short)ToInt64(str, sizeof(short));
11         }
12 
13         public static int ToInt32(string str)
14         {
15             return (int)ToInt64(str, sizeof(int));
16         }
17 
18         public static long ToInt64(string str)
19         {
20             return ToInt64(str, sizeof(long));
21         }
22 
23         private static long ToInt64(string str, int sizeInBytes)
24         {
25             int sizeInBits = sizeInBytes * 8;
26             int bitIndex = 0;
27             long result = 0;
28 
29             for (int i = str.Length - 1; i >= 0; i--)
30             {
31                 if (str[i] != ' ')
32                 {
33                     if (bitIndex == sizeInBits)
34                     {
35                         throw new OverflowException("binary literal too long: " + str);
36                     }
37 
38                     if (str[i] == '1')
39                     {
40                         result |= 1L << bitIndex;
41                     }
42                     else if (str[i] != '0')
43                     {
44                         throw new InvalidCastException("invalid character in binary literal: " + str[i]);
45                     }
46 
47                     bitIndex++;
48                 }
49             }
50 
51             return result;
52         }
53     }

  你可以這樣使用它們

1  byte myByteBitMask = BinaryLiteral.ToByte("                        0110 1100");
2  short myInt16BitMask = BinaryLiteral.ToInt16("          1000 0000 0110 1100");
3  int myInt32BitMask = BinaryLiteral.ToInt32("   0101 1111 1000 0000 0110 1100");
4  long myInt64BitMask = BinaryLiteral.ToInt64("  0101 1111 1000 0000 0110 1100");

  還可以通過擴展方法,使賦值更簡便

 public static int ToInt32(this string str)
 {
     return (int)ToInt64(str, sizeof(int));
 }
int myInt32BitMask2 = "   0101 1111 1000 0000 0110 1100".ToInt32();

  你可以將二進位數據中的分隔符用下劃線或者別的符號表示,只需要將ToInt64方法中的空格符的判斷條件改成對應的判斷就行

  該類有一個局限性是不能用作const常量的初始化,但是你可以為static readonly只讀變數賦值

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • http://www.cnblogs.com/finesite/archive/2011/01/28/1946940.html 給C:\Windows\temp 文件夾賦予完全控制許可權,如圖:
  • 1.ArrayList ArrayList list = new ArrayList(); //for遍歷 for (int i = 0; i < list.Count; i++) { SE se=(SE)list[i]; Console.WriteLine(se.Name); } //foreac
  • 沒網的日子真的不好過啊 1.背景: 對於常見業務中,數據併發是一個很頭疼的問題,很多時候,會出現資源共用導致線程阻塞的問題,這時候問題就來了,,,老闆也尾隨來了,來找你麻煩了,錢哪去了?,具體點兒, 比如生成訂單時候,多用戶同時下單並支付,這都是白花花的銀子啊,算錯了,真的出現上面的情況了,還一個就
  • 算起來也看過博客園好久了,都沒寫過一篇博客。現在要走了,先寫一篇博客回顧一些我的這職業生涯,以後多寫寫平時工作的時候的技術,否則全忘了。以前一直感覺這網站太醜,都不想上這網站。不過後來習慣了感覺還挺帶感的哈哈。 終於要離開這個公司了,其實早就應該走的,只不過不捨這個公司的朋友,那麼可愛的一群人,跟同
  • LZ菜鳥,僅整理筆記,順帶記錄一下,謂之增加印象。 LZ認為,沒必要太糾結原理,模型, 屌絲能用就對了,剩下的事情用多了自然會去探索。 中文:正則表達式,英文:Regular ExPression,也叫匹配模式(pattern),用來檢驗字元串是否滿足特定的規則,或從字元串捕獲滿足特定規則的子串。
  • 以下程式的輸出結果是( )。 using System; namespace HoverTreeTikuConsole { class Program { static void Main(string[] args) { MyStruct s1 = new MyStruct(1, 2); s1.x
  • Cactus基於之前簡單後臺管理的改良版本,完善了許可權管理,為後續的擴展和管理做了鋪墊。 完全開放代碼,可供學習交流 目前採用ASP.NET MVC4+Dapper+Autofac(反轉數據服務的映射)。 通過修改配置可以切換數據源(目前有支持mysql,mssql,sqlite三種資料庫)。 DB
  • 很多情況下,我們需要把數據類型做一些轉換,供其它外部的子系統調用。 最為典型的是生成json格式供javascript作調用。 現成的組件Newtonsoft.Json可以實現object2json之間的轉換。 Newtonsoft.Json.JavaScriptConvert.SerializeO
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...