2017-07-14 117 views
1

我正在寫vb.net來填充值。我的代碼如下:用「&HBB」填充右鍵VB.Net

Dim Ni As Byte() = { &HA6, &H02, &H01,....}  
Dim Nca As Byte() = { &H12, &H00, &H02,....}  
If (Ni.Length <= Nca.Length - 36) Then 

     Dim padLength As Integer = Nca.Length - 36 - Ni.Length 
     Dim padvalue As Byte() = {&HBB} 
     For Each w As Integer In padLength 
      Console.Write(Ni =Ni+ Ni.rigtPadding({&HBB})) 
     Next 

End If 

我的代碼不工作。如果Ni.Length < = Nca.Length-36,我需要由填充在右邊的全部Ni與十六進制值「& HBB」的Nca-36-Ni字節組成。它可能超過1「& HBB」需要填充在右側。然後我需要填充的Ni的最終結果。

Ni是發行人的公開密鑰,NCA是CA的公鑰,最後的結果我想應該是{& H6A,02,11,FF,.....,BB,BB,BB}

謝謝你非常希望得到任何幫助和評論。

+0

使用字符串X格式說明嘗試。在填充字符串後轉換回 – Ramankingdom

+0

嗨@Ramankingdom謝謝,我搜索X格式,但仍然困惑。 – ccy

+1

這不是一個有效的循環:'對於每個w整數在padLength'中,它甚至不應該編譯(我希望它不會,否則你的編譯器會嚴重混亂!)。該循環目前正試圖迭代每個整數...整數? –

回答

2

由於您使用的是常規數組,所以這相對簡單(但使用List(Of T)可能更簡單)。

首先你需要調用Array.Resize()以增加數組的大小。然後,您可以使用常規的For loop來填充新的空間。

Dim prevLength As Integer = Ni.Length 'Store the previous length so we can start looping from it. 
Array.Resize(Ni, Ni.Length + padLength) 'Take the original length and increase it by how much needs to be padded. 

'Iterate from the beginning of the padding to the new end of the array. 
For i = prevLength To Ni.Length - 1 
    Ni(i) = &HBB 
Next 

我還建議你閱讀一下關於如何陣列的工作:Arrays in Visual Basic - Microsoft Docs

+0

感謝您的回覆和耐心,您的代碼沒有給出任何錯誤,但我測試了倪的結果,沒有任何變化。 – ccy

+0

@ccy:如果你在'Ni(i)=&HBB'行放置一個斷點,它會被擊中嗎?你是否曾經進入過If? –

+0

我測試了代碼,Ni(i)=&HBB沒有命中。 – ccy

1

可以使用Redim Preserve手動調整NCI和設置填充字符:

Dim Padding as Byte = &HBB 
Dim Nca As Byte() = { &H12, &H00, &H02,....} 
Dim Ni As Byte() = { &HA6, &H02, &H01,....} 
Dim len = Nca.Length - 36 
if (len > Ni.Length) Then 
    Redim Preserve Ni(len+1) 
    For i As Integer = len to Ni.Length-1 
     Ni(i) = Padding 
    Next 
End if 

或者你可以使用LINQ:

Dim Padding as Byte = &HBB 
Dim Pad =Function(i) If(i < Nca.Length, Nca(i), padding) 
Dim Nca As Byte() = { &H12, &H00, &H02,....} 
Dim len as integer = Nca.Length - 36 
if len > Ni.Length Then Ni = Enumerable.Range(0, len+1).Select(Pad).ToArray()