二进制文本转换帮助类
2018-08-02 06:27:37来源:博客园 阅读 ()
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只读变量赋值
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:VS Code如何更换主题皮肤?
- CSS文本超出自动隐藏显示省略号 2020-04-27
- XHTML?它与 HTML的区别?如何转换 2020-03-31
- HTML字符实体与文本格式化标签 2020-03-30
- HTML 链接展现形式与target属性和锚文本设置 2020-03-25
- HTML连载75-3D转换模块之正方体 2020-03-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash