2014-06-18 2 views
0

VB.net으로 작성된 코드가 있으며 일부 사이트를 통해 C#으로 변환되었습니다. 코드가 복잡하지 않으므로 번역의 대부분은 아무런 문제없이 잘되었습니다. 하나의 문제는 실제로 두통을 유발하고 많은 웹 사이트 (이 웹 사이트를 포함하여)에서 참조되는 동안 나는 계속 실행할 수 없습니다. 로 변경바이트에서 문자열로 변환 할 수 없습니다. (VB.Net에서 C#으로)

Public Shared Function UTF8HexToByte(ByVal str As String) As Byte 

와 번역자 : 나는대로 VB.Net에서 함수가 decalred이 내 C# 코드에서, 나중에

public static byte UTF8HexToByte(string str) 

,이 함수를 호출하고 있습니다 :

for (int i = 0; i <= Key1.Length - 1; i++) 
      { 
       Key1[i] = 16 * UTF8HexToByte(TempKey1[2 * i]) + UTF8HexToByte(TempKey1[2 * i + 1]); 

      } 

하지만 VB.net에서 작동하는 것은 여기서 작동하지 않습니다. 이 오류 받고 있어요 : 'maker.Resources.makeC.UTF8HexToByte (문자열)'에 가장 적합한 오버로드 된 메서드 일치하는 일부 잘못된 인수가 7

오류를

오류 8 인수 1 : '바이트'에서 변환 할 수 없습니다 to 'string'

이제 문제는 UTF8HexToByte이 문자열을 수신하고 바이트를 반환한다는 것입니다. 반면에 문자열은 TempKey1이고 문자열이 아닙니다. 는 그러나이 VB.Net 코드에서 작업을 수행, 그래서 혼란 스러워요 ... 여기 VB.Net의 코드입니다 :

For i As Integer = 0 To Key1.Length - 1 
     Key1(i) = 16 * UTF8HexToByte(TempKey1(2 * i)) + UTF8HexToByte(TempKey1(2 * i + 1)) 
    Next 

TempKey는 바이트 [] 키 1 바이트 []입니다.

도움이 될 것입니다. 나는이 하나에 정말로 붙어있다.

+0

'char (TempKey1)'이 작동합니까? 그렇지 않으면 오류가 있는지 확인하십시오. 'Key1'이 바이트라면, 당신이 말하는 것처럼, 나는'Key1.Length'에 에러를 예상 할 것입니다. 아니면 "바이트 배열"을 의미합니까? –

+0

http://msdn.microsoft.com/en-us/library/system.runtime.remoting.metadata.w3cxsd2001.soaphexbinary(v=vs.110).aspx –

+0

바이트를 문자열로 명시 적으로 변환 해보십시오. 즉 UTF8HexToByte (TempKey1 [2 * i] .ToString()) – clausc

답변

0

메서드 서명은 문자열을 기다리고 있음을 알려줍니다. 'maker.Resources.makeC.UTF8HexToByte(string)' has some invalid arguments
변경

Key1[i] = 16 * UTF8HexToByte(TempKey1[2 * i]) + UTF8HexToByte(TempKey1[2 * i + 1]); 

Key1[i] = 16 * UTF8HexToByte(System.Text.Encoding.UTF8.GetString(new []{TempKey1[2 * i]})) + UTF8HexToByte(System.Text.Encoding.UTF8.GetString(new []{TempKey1[2 * i + 1]})); 
+0

나는 그것을했고 지금이 메시지를 받는다 : Error \t 7 암시 적으로 'int'유형을 'byte'로 변환 할 수 없다. 명시 적 변환이 존재합니다 (캐스트가 누락 되었습니까?). 나는 그것이 정수라고 생각한다. 내가 맞습니까? –

+0

답변이 업데이트되었습니다. 전송해야 할 수도 있습니다. –

0

에 나는 VB.NET에 큰 아니지만, 테스트 코드의 빠른 비트는 나 함수에 byte 지나가는 매우 행복 것을 보여줍니다 기대는 string입니다. 이것은 C#이 전혀 만족스럽지 않기 때문에 변환을 수행하는 코드를 작성하는 것 외에는 선택의 여지가 없습니다.

원본 코드의 의미를 유지하려면 VB.NET이 byte에서 string으로 변환하고 복제하는 작업을 파악해야합니다.

그것은이다 전혀있을 법이 당신이 C#에서 찾을 수

Key1[i] = 16 * UTF8HexToByte(TempKey1[2 * i].ToString()) + UTF8HexToByte(TempKey1[2 * i + 1].ToString()); 

한 가지가 유형과 형식 변환에 대해 많은 엄격한 점이다 그래서, byteToString() 방법에 불과 전화입니다 , 한 형식에서 다른 형식으로 데이터가 변경되는 방식에 대해 생각하게해야합니다.

0

C#에서 bytestring 사이에 암시 적 또는 자동 변환이 없습니다.

string.Format("{0}", yourByte) 

@Mr 리스터가 언급 한 바와 같이, string.Format는 바이트의 수치와 문자열을 반환합니다 : 가장 좋은 방법은 stringstring.Format를 통해 얻을 수 있습니다. ASCII 문자로 해석해야하는 경우 char :

(char)yourByte 
+1

그러면 원하는 "z"대신 "122"와 같은 문자열이 생깁니다. –

+0

미안하지만, 나는 그 성격이 필요하다는 것을 알지 못했습니다. 이 경우, char 로의 캐스팅으로 충분하다 :'(char) yourByte'. – Simone

관련 문제