十六进制字符串"01",转换成二进制,并且我需要取到里面每一位的值也就是里面的0或者1,来判断客户端的状态。我第一次用的方法如下:失败。 int S2 = Convert.ToInt32(_notice.Substring(44, 2), 16);//从16进制字符串中截取出"01",并转化为十进制,
string _s2 = Convert.ToString(S2, 2);//将十进制转换为2进制 char[] _s_2 = _s2.ToCharArray();//赋给数组,取里面八位的值,然后用switch语句判断每一位的值,
string out_2 = "";
switch (_s_2[0])
{
case '1':
out_2 = "报警";
break;
case '0':
out_2 = "正常";
break; }
string S2_out_0 = out_2;//欠压,1-报警,0-正常。
switch (_s_2[1])
{
case '0':
out_2 = "无效";
break;
case '1':
out_2 = "报警";
break; }
string S2_out_1 = out_2;//掉电,1-报警,0-无效。
下面是我尝试的第二种方法,又失败了,唉,无计可施,所以发帖求教个现成的方法,急着用,谢谢!
int S1 = Convert.ToInt32(_notice.Substring(44, 2), 16);//从16进制字符串中截取出"01",并转化为十进制,
string _s1 = Convert.ToString(S1, 2);//将十进制转换为2进制,然后用Substring()函数截取里面的相应位的值,无论从左边取还是从右边取里面的值都失败。唉! string out_1 = "";
switch (_s1.Substring(7, 1))
{
case "0":
out_1 = "未定位";
break;
case "1":
out_1 = "已定位";
break; }
string S1_out_0 = out_1;//定位状态,1-已定位,0-未定位。
switch (_s1.Substring(6, 1))
{
case "0":
out_1 = "正常";
break;
case "1":
out_1 = "劫警";
break; }
string _s2 = Convert.ToString(S2, 2);//将十进制转换为2进制 char[] _s_2 = _s2.ToCharArray();//赋给数组,取里面八位的值,然后用switch语句判断每一位的值,
string out_2 = "";
switch (_s_2[0])
{
case '1':
out_2 = "报警";
break;
case '0':
out_2 = "正常";
break; }
string S2_out_0 = out_2;//欠压,1-报警,0-正常。
switch (_s_2[1])
{
case '0':
out_2 = "无效";
break;
case '1':
out_2 = "报警";
break; }
string S2_out_1 = out_2;//掉电,1-报警,0-无效。
下面是我尝试的第二种方法,又失败了,唉,无计可施,所以发帖求教个现成的方法,急着用,谢谢!
int S1 = Convert.ToInt32(_notice.Substring(44, 2), 16);//从16进制字符串中截取出"01",并转化为十进制,
string _s1 = Convert.ToString(S1, 2);//将十进制转换为2进制,然后用Substring()函数截取里面的相应位的值,无论从左边取还是从右边取里面的值都失败。唉! string out_1 = "";
switch (_s1.Substring(7, 1))
{
case "0":
out_1 = "未定位";
break;
case "1":
out_1 = "已定位";
break; }
string S1_out_0 = out_1;//定位状态,1-已定位,0-未定位。
switch (_s1.Substring(6, 1))
{
case "0":
out_1 = "正常";
break;
case "1":
out_1 = "劫警";
break; }
解决方案 »
- 真心请教作业,请编程高手不吝赐教!【求商议】
- Word::Document类,Paste()字符后,无法定位到刚才黏贴的字符后。
- 紧急求助,串口COM10以上打开后,设置校验位,数据位和停止位不成功
- 类序列化成stream之后,如何转化成string保存,再从string转化回stream
- console方式的,怎么等待用户按一个按键再退出来啊?
- 求解:序列不包含任何元素 问题---.net网站
- c# 动态添加菜单项 并且 响应事件
- 送分推荐C#视频讲座(进者有分)
- 有编程经验的菜鸟初学.net,请高手指点方向
- C#中怎样调用第三方的控件?
- 调用自制DLL中的GetPrivateProfileString()说找不到指定的内容。。
- 单击删除按钮时系统为什么提示rolename不能为空?
int S1 = Convert.ToInt32(_notice.Substring(42, 2), 16);
string _s1 = Convert.ToString(S1, 2);
if(_s1.Length<8)
{
for (int i = 0; i < 8-_s1.Length;i++ )
{
//_s1 += "0";
_s1 += "0" + _s1;
}
}
string _s1 = Convert.ToString(S1, 2);
string _zero = "";
if(_s1.Length<8)
{
for (int i = 0; i < 8-_s1.Length;i++ )
{
//_s1 += "0";
_zero += "0";
//_s1 += "0" + _s1;
}
_s1 = _zero + _s1;
}
//十六进制字符串转int
int i = int.Parse("10", System.Globalization.NumberStyles.HexNumber);
//转二进制字符串(可能不满8位)
string str = Convert.ToString(i, 2);
//转8位长度字符串
int i2 = int.Parse(str);
string result = i2.ToString("00000000");
另外楼主可以看看“位运算”,也是一种比较好的方法。
int S2 = Convert.ToInt32(_notice.Substring(44, 2), 16);
int b = 1<<n;// 这个N就是你要检测的第多少位
if( S2&b == 0)
{
//这里写检测位为0的代码
}
else
{
//这里写检测为为1的代码
}