最近项目的协议需要根据传过来的十六进制字符串转换成二进制来判断设备状态。
例如:
"00" => 00
表示设备1关、设备2关
“01” => 01
表示设备1关、设备2开
“02” => 10
表示设备1开、设备2关
"03" => 11
表示设备1开、设备2开
但是通过下面语句进行转换就会丢失开头的0。
int x = Convert.ToInt32(temp);
所以转换二进制需要进行补位操作。如下:
字符串转二级制补位问题
string temp = "02";
int decimalism = Convert.ToInt32(temp);
string binary = Convert.ToString(x, 2).PadLeft(2, '0');
System.Console.WriteLine(binary);
System.Console.WriteLine(binary[0]);
System.Console.WriteLine(binary[1]);
控制台输出
01
0
1
当我用到ASP.NET程序中是,还是存在问题,获取的0和1是对应的ASCII码。
string temp = "02";
int decimalism = Convert.ToInt32(temp);
string binary = Convert.ToString(x, 2).PadLeft(2, '0');
int device0Status = binary[0] // 48
int device1Status = binary[1] // 49
因为binary[0]
获取到的是char
类型,所以我们需要把char
类型转成string
类型,再转成int
。
string temp = "02";
int decimalism = Convert.ToInt32(temp);
string binary = Convert.ToString(x, 2).PadLeft(2, '0');
int device0Status = Convert.ToInt32(binary[0].ToString()) // 0
int device1Status = Convert.ToInt32(binary[0].ToString()) // 1
这样问题就解决了。
C# | PadLeft方法
在c#中,PadLeft()是一个字符串方法。此方法用于对String中的字符进行右对齐,方法是在字符串左侧填充空格或指定字符,以达到指定的总长度。可以通过向该方法传递不同的参数来重载该方法。
- String.PadLeft Method(Int32)
- String.PadLeft Method(Int32, Char)
语法:
/// <sumary>
/// 自动右补全
/// </sumary>
/// <param name="totalWidth">补全的长度</parm>
/// <param name="paddingChar">补全的字符</parm>
public string PadLeft(int totalWidth, char paddingChar)
标签:补位,十六进制,Convert,string,temp,binary,二进制,PadLeft,int
From: https://www.cnblogs.com/trendyshuai/p/16906973.html