2014-12-18 2 views
0

여기에 지금까지 나와있는 코드가 있지만 AA와 같은 문자 값을 입력하면이 예외가 throw됩니다.쉼표로 구분 된 16 진수 값을 텍스트 상자에 입력하고 16 진수 값으로 출력하는 방법 C#

"mscorlib.dll에서 'System.FormatException'형식의 처리되지 않은 예외가 발생했습니다. 추가 정보 : 입력 문자열의 형식이 올바르지 않습니다."

또한 사용자가 잘못된 값을 입력하면 오류 메시지가 표시됩니다. 어떤 도움이라도 좋을 것입니다.

   private void GPIO_Click(object sender, EventArgs e) 
       { 
        string hex = WriteValue.Text; 
        string[] hex1 = hex.Split(','); 
        byte[] bytes = new byte[hex1.Length]; 

        for (int i = 0; i < hex1.Length; i++) 
        { 
         bytes[i] = Convert.ToByte(hex1[i]); 
        } 

        for (int i = 0; i < hex1.Length; i++) 
        { 
        GPIO(h[index], dir, bytes[i]); 
        ReadValue.Text += bytes[i].ToString(); 
        } 
       } 

답변

1

당신이

bytes[i] = Convert.ToByte(hex1[i]); 

에 도착하면 hex1[i]의 값이 "AA"

입니다

"AA"를 1 바이트의 문자열로 사용할 수 없기 때문에 여기에서 앱이 실패합니다.

문자열의 바이트 배열 변환을 찾으려면 해당 값을 chars로 분할해야합니다. 다음과 같이하십시오 :

string hex = "AA"; 
    string[] hex1 = hex.Split(','); 
    List<byte[]> byteArrays = List<byte[]>(); 

    foreach (string t in hex1) 
    { 
     int byteIndex = 0; 
     byte[] newArray = new byte[hex1.Length]; 
     foreach(char c in t) 
     { 
       newArray [byteIndex] = Convert.ToByte(c); 
       byteIndex++; 
     } 
     byteArrays.add(newArray); 
    } 

그러나 나는 그것이 당신이 무엇인지 생각하지 않습니다. 당신은 문자열로 표현 된 10 진수 값을 파싱하려고합니다.

+1

0xAA는 단일 바이트 값입니다 ... – vojta

+0

오오 호 기다려주세요. 나는 OP가 얻으려고했던 것을 얻지 못했습니다. –