C# Visual Basic.NET中的位操作
我正在用VB.NET编写一些旧的应用程序到C#和ASP.NET 3.5。一切都很顺利,但我有这个问题-而且,由于数据库不会被更改,我必须找到一个解决方案 旧应用程序将所需天数(从星期日到星期六)的列表保存在一个字节中。它就是这样做的:C# Visual Basic.NET中的位操作,c#,vb.net,bit-manipulation,C#,Vb.net,Bit Manipulation,我正在用VB.NET编写一些旧的应用程序到C#和ASP.NET 3.5。一切都很顺利,但我有这个问题-而且,由于数据库不会被更改,我必须找到一个解决方案 旧应用程序将所需天数(从星期日到星期六)的列表保存在一个字节中。它就是这样做的: If chkDaily.Checked Then daysBitmask = 127 ' This is for a full week Else For i = 0 To chklstWeek
If chkDaily.Checked Then
daysBitmask = 127 ' This is for a full week
Else
For i = 0 To chklstWeekly.Items.Count - 1
If chklstWeekly.Items(i).Selected Then
' List the selected items
daysBitmask += 2 ^ CInt(chklstWeekly.Items(i).Value)
daysBitmask = daysBitmask
Message2.InnerText = daysBitmask
End If
Next
End If
我把它改成了
if (rdbDaysList.SelectedValue == DAILY)
daysBitmask = 127;
//This is for a full week
else
foreach (var d in ckbDaysList.Items)
{
ListItem day = d as ListItem;
if (day.Selected)
{
daysBitmask += Convert.ToByte(Math.Pow(2, Convert.ToDouble(day.Value)));
}
}
这很有效。我最大的问题是从字节转换成C代码。
原来的VB.NET就在上面:
If (dr("DesireDays").ToString() = "127") Then
chkDaily.Checked = True
chkWeekly.Checked = False
chklstWeekly.Enabled = False
Else
chkWeekly.Checked = True
chkDaily.Checked = False
chklstWeekly.Enabled = True
Dim AD As Integer = dr("DesireDays").ToString()
Dim i As Integer
For i = 0 To chklstWeekly.Items.Count - 1
If AD And 2 ^ i Then
chklstWeekly.Items(i).Selected = True
End If
Next i
任何帮助都将不胜感激。您不想使用
进行加倍,因为您需要int
(这就是CInt
提供给您的)
此外,对于二次幂运算,位移位通常比指数运算更清晰(尽管选择适合您的选项)
另一方面,通常使用按位或
(垂直|
条)而不是加法更安全
ListItem day = d as ListItem;
if (day.Selected)
{
daysBitmask |= 1 << Convert.ToInt32(day.Value);
}
ListItem day=d作为ListItem;
如果(已选择的日期)
{
daysBitmask |=1非常感谢,除了答案之外,我会考虑你的考虑。再次感谢!佩德罗·杜索
ListItem day = d as ListItem;
if ((daysBitmask & (1 << Convert.ToInt32(day.Value))) > 0)
{
day.Selected = true;
}