2014-02-25 2 views
2

이 함수는 Java 프로그램에 있습니다.C#의 Integer.parseInt (String s, int radix)

private static byte[] converToByte(String s) 
    { 
     byte[] output = new byte[s.length()/2]; 
     for (int i = 0, j = 0; i < s.length(); i += 2, j++) 
     { 
      output[j] = (byte)(Integer.parseInt(s.substring(i, i + 2), 16)); 
     } 
     return output; 
    } 

동일한 문제를 C#으로 만들려고하는데 문제가 있습니다. 나는 이것을 시도했다 :

output[j] = (byte)(Int16.Parse(str.Substring(i, i + 2))); 

그러나 반복의 몇 번 나는 System.OverflowException을 얻은 후에 C#에서 무엇이 명령이 될까?

감사합니다.

+2

'Convert.ToByte (string, int)'를보십시오. (왜이 경우에는'Int16.Parse'를보고 있었는지 확실하지 않습니다 ... 이것은 "단일 바이트를 파싱"하거나 "Integer.parseInt"와 동등합니다.) –

+0

'[java ]'대답에 없기 때문에, 그냥 질문에 참조하십시오. –

+0

@ axy108 당신은 이것에 대한 답변을 찾았나요? 같은 문제 (복어 암호 해독을 사용하여) # 자바 코드를 포팅입니다 # –

답변

2

당신은 당신의 라인에 잘못된 데이터 유형을 사용 : 당신은 INT16 (짧은) 때문에 오버 플로우 예외를 얻고있다

output[j] = (byte)(Int16.Parse(str.Substring(i, i + 2))); 

Short Name .NET Class Type Width Range (bits) 
byte Byte Unsigned integer 8 0 to 255 
short Int16 Signed  integer 16 -32,768 to 32,767 

되어 지금까지 큰에 바이트에 맞게.

substring(int beginIndex, int endIndex) 

C#의 구현이 걸리는 반면 :

substring(int beginIndex, int length) 

이것은 C# 의미

2
private static sbyte[] converToByte(string s) 
{ 
    sbyte[] output = new sbyte[s.Length/2]; 
    for (int i = 0, j = 0; i < s.Length; i += 2, j++) 
    { 
     output[j] = (sbyte)(Convert.ToInt32(s.Substring(i, 2), 16)); 
    } 
    return output; 
} 
0

tihs 문제로 어려움을 겪고 후 자신 나는 진짜 문제는 자바의 문자열 방법임을 깨달았다 동일한 코드가 오버플로를 일으키는 더 큰 청크를 잡아냅니다.

@Dave Doknjas는 올바른 방향 이었지만 새로운 작은 청크 크기의 바이트로 변환 할 수 있습니다.

output[j] = Convert.ToByte(str.Substring(i, i + 2), 16); 
관련 문제