C#.NET Q&A

ArrayList에 Add와 AddRange로 추가시 형변환 예외 devker 평점: 없음 조회: 178
ArrayList inputBufArray = new ArrayList();에서

inputBufArray.add로 추가한데이터는

arrayToByte = (byte[])inputBufArray.ToArray(typeof(byte));

로 Byte배열로 변환이 되는데..

AddRange로 한번에 여러개 추가한데이터는 위에 Byte변환에서

처리되지 않은 'System.InvalidCastException' 형식의 예외가 mscorlib.dll에서 발생했습니다.

라고 뜨는데.. 형변환 예외가 왜 발생하는걸까요.. ArrayList에 데이터는 똑같이 정상으로 들어간거 같은데..
태그 : ArrayList
작성자 정보
devker
Level 6
 [EXP.12/14]

메일:  비공개
글등록 +12 48 덧글등록 +3 12
자기소개
잘부탁 드립니다.
글 공유하기 |
  tweet facebook
2018-03-12 오후 4:42:17
나도한마디
사용자
썬콩콩            [2018-03-13]
Level 11
 [EXP.6/40]
ArrayList inputBufArray = new ArrayList();
object[] a = new object[3];
a[0] = (byte)1;
a[1] = (byte)2;
a[2] = (byte)3;
inputBufArray.AddRange(a);
byte [] obj = (byte[])inputBufArray.ToArray(typeof(byte));

이렇게 하면 해결이 되네요 ~ 여러가지 테스트 결과 AddRange의 매개변수가 byte 이외의 데이터 값이 들어가면 System.InvalidCastException 이 발생합니다 !
byte 이외의 데이터를 넣으면 변환해서 넣어야 할거 같습니다!
list.Add로도 byte 데이터가 아니면 똑같은 오류가 발생해요 ~
사용자
devker            [2018-03-14]
Level 6
 [EXP.12/14]
public static byte DecToHex(string bytes)
{
string hex = Convert.ToString(int.Parse(bytes, NumberStyles.HexNumber));
return Convert.ToByte(hex);
}
public static byte[] StrToHex(string str)
{
byte[] bytes = Encoding.Default.GetBytes(str);

return bytes;
}

우선 답변 감사드립니다. 결국 Byte이외에 데이터를 넣으면 형변환예외가
발생한다는 이야기인데...

위에 코드에서 DecToHex 함수를 거치면 Byte로 바뀌어서 괜찮은데
밑에 StrToHex함수로 String값을 Byte배열로 변경했는데 여기서
형은 Byte아닌가요..Byte로 제대로 변환이 안되었다고 봐야할까요..
사용자
썬콩콩            [2018-03-20]
Level 11
 [EXP.6/40]
byte로 변환 되었다고 봐야겠죠 string의 문자열을 byte로 하나씩 변환시켜 배열형태로 리턴해주었으니깐요

만약 DecToHex 경우엔 A의 핵사코드인 41을 입력한다고하면 Hex코드로 인식하니 65라는 값이 리턴될꺼고, strToHex의 경우는 크기2의 배열로 4와 1의 byte 코드를 리턴할꺼에요.

그러니 두개로 같은 결과를 뽑으시려면 DecToHex("41") , StrToHex("A") 이렇게 입력하셔야하구요
글리스트
윈폼 이미지파일 출력 질문[2]+1  봉구스박보검
안녕하세요 선후배님들 WCF 기반 아키텍처 질문드립니다[2]  마레다
C# Null Reference log 관련 질문입니다.[1]  초보개뱔~
C# 데이터그리드뷰 관련 질문있습니다.[1]  민이2
어느게 더 효율적인 코딩인가요??[2]+1  빠라밤바
c# 윈폼 object배열[1]+2  이성민
메인폼안의 다른 컨트롤 중앙에 띄우기 질문드립니당..[1]+1  짱재
C# 깜박깜박 거리는 그래픽 문제에 대해 질문합니다.[2]+4  hhgya
C# 파일 여러개 업로드[1]+10  타타
웹서비스로 AccDB조회 하는 프로그램(윈도우7, 윈도우 10)  오하우하
 ★현재글->   ArrayList에 Add와 AddRange로 추가시 형변환 예외[1]+2  devker
문자셋( charset ) 설정하는방법좀 가르쳐주세요[1]+2  엿장수
DateTime형의 default를 Null로 잡는 방법이 있는건가요?[1]+2  굿모닝
c# User Control 을 사용하여 double click 이벤트를 만드는 방법이요[2]  Tube
안녕하세요 C# 어르신분들 listview 질문이 있어서 올립니다.[2]  C#꿈나무
[RE] 안녕하세요 C# 어르신분들 listview 질문이 있어서 올립니다. 파일첨부 훈스남훈남조으다
메인 폼에서 새로운 폼 열릴때. 질문드립니다.[3]+5  짱재
Ushort 음수값 저장[2]  훈스훈스훈스
MySqlConnection 트랜잭션 변수 왜 있나요?  부탁해스마일
[C#] A.EXE 와 B.EXE 간의 Interface ?, Event ? DLL 을 만들어서 메세지 전달이 가...[4]+4  inhi5869
[질문]C# 에서 경로설정 방법 문의  파일첨부 CS시작