好的,这是我有点困惑的功能(小生锈的按位运算符)
void two_one(unsigned char *in,int in_len,unsigned char *out)
{
unsigned char tmpc;
int i;
for(i=0;i<in_len;i+=2){
tmpc=in[i];
tmpc=toupper(tmpc);
if((tmpc<'0'||tmpc>'9') && (tmpc<'A'||tmpc>'F'))tmpc='F';
if(tmpc>'9')
tmpc=toupper(tmpc)-'A'+0x0A;
else
tmpc-='0';
tmpc<<=4; //Confused here
out[i/2]=tmpc;
tmpc=in[i+1];
tmpc=toupper(tmpc);
if((tmpc<'0'||tmpc>'9') && (tmpc<'A'||tmpc>'F'))tmpc='F';
if(tmpc>'9')
tmpc=toupper(tmpc)-'A'+0x0A;
else
tmpc-='0';
out[i/2]|=tmpc; //Confused Here
}
}
我标记了我不太了解的两个地方。
如果有人可以帮助我将这些片段转换为Vb.Net,或者至少可以帮助我了解那里发生的事情,那将是很棒的。
谢谢。
更新资料
所以这是我想出的,但是并不能完全给我正确的数据……这里看起来有什么问题吗?
Public Function TwoOne(ByVal inp As String) As String
Dim temp As New StringBuilder()
Dim tempc As Char
Dim tempi As Byte
Dim i As Integer
Dim len = inp.Length
inp = inp + Chr(0)
For i = 0 To len Step 2
If (i = len) Then Exit For
tempc = Char.ToUpper(inp(i))
If ((tempc < "0"c Or tempc > "9"c) AndAlso (tempc < "A"c Or tempc > "F"c)) Then
tempc = "F"c
End If
If (tempc > "9"c) Then
tempc = Char.ToUpper(tempc)
tempc = Chr(Asc(tempc) - Asc("A"c) + &HA)
Else
tempc = Chr(Asc(tempc) - Asc("0"c))
End If
tempc = Chr(CByte(Val(tempc)) << 4)
Dim tempcA = tempc
tempc = Char.ToUpper(inp(i + 1))
If ((tempc < "0"c Or tempc > "9"c) AndAlso (tempc < "A"c Or tempc > "F"c)) Then
tempc = "F"c
End If
If (tempc > "9"c) Then
tempc = Char.ToUpper(tempc)
tempc = Chr(Asc(tempc) - Asc("A"c) + &HA)
Else
tempc = Chr(Asc(tempc) - Asc("0"c))
End If
temp.Append(Chr(Asc(tempcA) Or Asc(tempc)))
Next
TwoOne = temp.ToString()
End Function
最佳答案
tmpc <<= 4
将tmpc
中的位向左移动4个位,然后将该值分配回tmpc。因此,如果tmpc
是00001101
,它将变为11010000
out[i/2]|=tmpc
按位或与tmpc
的数组值。因此,如果out[i/2]
为01001001
并且tmpc
为10011010
,则out[i/2]
变为11011011
编辑(更新的问题):
原始的tmpc-='0';
行与新的代码tempc = "0"c
不完全相同。 -=
从变量中减去值,因此您需要tempc = tempc - "0"c
或类似的值
关于c++ - C++到vb.net,情侣对话问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11043191/