2015-01-06 5 views
1

조금 기본적인 문제가 있습니다. C에서는 byte 유형이 없으므로 시스템 파일에 버퍼를 보유하고 읽고 처리해야하는 unsigned char으로 정의했습니다. 내 C 프로그램은 지금 byte 유형 내장하지만 '부호 INT'로 정의하고있다 C#을 작업 할 필요가있다.바이트 대 char 대 int 유형

두 시스템간에 캐스팅에 문제가 있습니까? "단어"가 무엇이든 상관없이 기본 저장소가 변경되지 않았다고 생각합니다. 따라서 다음과 같은 것을하십시오.

//C# 
//byte[] b=new byte[2]; 
//b[0]=11; 
//b[1]=12; 
C 
byte b[2];//unsigned char 
b[0]=(byte)(11); 
b[1]=(byte)(12); 

+0

'C' 또는'C++ '? 프로그램을 C#으로 변환하려고합니까? 아니면 두 프로그램이 서로 이야기하고 있습니까? – Sayse

+2

참고 : 이러한 캐스트는 쓸모가 없습니다. – WhozCraig

+0

무엇이 문제입니까? 귀하의 '바이트'형식은 8 비트 부호없는 정수 값이며 C#의 '바이트'형식도 8 비트 부호없는 정수입니다. –

답변

1

C 표준은 C99 이후 int8_t으로 정의되었습니다. 이를 8 비트 유형에 사용하거나 부호가없는 아날로그에 대해서는 uint8_t을 사용하십시오.

구조체에서 이러한 유형을 사용할 때는주의해야합니다. 인접한 멤버가 연속적으로 메모리에있을 것이라는 보장은 없습니다. 배열은 괜찮을거야.

+0

오 멋진 내 프로그램에 uintxx_t 꽤 많이 사용해야하지만, 숫자 8을 간과 : 좀 더 확신 D 지금 수영을 계속합니다. – user3305259

0

C의 값 유형이 'int'숫자 인 한이 앞뒤로 캐스팅하는 데는 문제가 없어야합니다.