2017-01-06 1 views
1

제목에서 알 수 있듯이 "처리되지 않은 'System.FormatException'형식의 예외 메시지가 발생합니다. 이유를 알아내는 데 도움이 필요합니다. 내가 파싱 할 필요가있는 16 진수 값을 가진 파일을 읽었습니다. 내가 읽고있는 값은 "0x12345678"(길이가 4 바이트)과 비슷할 것입니다.바이트로 변환하는 처리되지 않은 예외

첫 번째 바이트 (리틀 엔디안입니다)는 'BE'이며 아무런 문제가 없습니다. 내 문제는 다음 다음 세 바이트 걸리고 사람이 읽을 수 int로 변환하려고합니다. (긴 이야기,하지만 난 구문 분석하고있어 출력을 생성하는 프로그램은 사람이 읽을 진수를 받아이 LE 넌센스로 변환합니다.)

string parmVal = lineF.Substring((pos + length)); // this is "0x12345678" 

    string hexID = parmVal.Substring(2, 2); // stores '12' 

    byte[] testID = new byte[4]; 
    testID[0] = Convert.ToByte(parmVal.Substring(4, 2)); <----error here 
    testID[1] = Convert.ToByte(parmVal.Substring(6, 2)); 
    testID[2] = Convert.ToByte(parmVal.Substring(8, 2)); 
    testID[3] = Convert.ToByte(0); 

    decimalID = int.Parse(hexID, System.Globalization.NumberStyles.HexNumber); // stores 18 (0x12) 
    testIDNumber = BitConverter.ToInt32(testID,0); // stores 345678 

을 흥미롭게도, 코드에서 내가 나중에 출력이 값을을 CSV로 파일 및 예외를 throw하는 경우에도 인쇄 된 값을 올바른 모양. 마지막 3 바이트에서 첫 번째 바이트와 같은 방식으로 읽기를 시도했지만, 그 다음엔 int.Parse()를 수행하면 엔디안 - 거꾸로 되돌아갑니다. 내가 어디 0x 0x "345678"변환 0x "785634"로 변환하고 싶습니다.

+1

합니다. 오류가있을 수 없습니다. parmVal의 값이 0x12345678입니까? – CodingYoshi

+0

코드가 작동합니다. 'lineF.Substring ((pos + length))'를''0x12345678 ''로 대체하면 오류없이 실행됩니다. –

+0

이것은 정신 건강 검사를 위해 비명을 지르고 있습니다. "0x12345678"이 작동하기 때문에 하위 문자열 호출에 의해 반환되는 내용이 될 수 없습니다. 나는 실험을 할 것이다 : 명시 적으로 예상 된 조건 (parmVal == "0x12345678")을 확인하고 일치하지 않으면 던져 라. 네가 던질 것이 의심된다. – DLCross

답변

1

Convert.ToByte 호출에서 기본을 지정하십시오. 귀하의 경우에는

이 있어야한다 : 불가능

testID[0] = Convert.ToByte(parmVal.Substring(4, 2), 16);