好的,这是我有点困惑的功能(小生锈的按位运算符)

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 <<= 4tmpc中的位向左移动4个位,然后将该值分配回tmpc。因此,如果tmpc00001101,它将变为11010000

out[i/2]|=tmpc按位或与tmpc的数组值。因此,如果out[i/2]01001001并且tmpc10011010,则out[i/2]变为11011011

编辑(更新的问题):
原始的tmpc-='0';行与新的代码tempc = "0"c不完全相同。 -=从变量中减去值,因此您需要tempc = tempc - "0"c或类似的值

关于c++ - C++到vb.net,情侣对话问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11043191/

10-11 02:07