2010-12-15 7 views
-3

C 클래스 라이브러리에 대한 C# 래퍼를 만들려고하는데 USB 데이터 버스 통신 장치를 제어합니다. 이 장치는 장치가 초기화 될 때 설정된 값에 따라 외부 클럭에 연결되거나 자체 내부 클럭을 사용하도록 지원합니다. 다음 #DEFINE 변수숫자 서식

#define DATA_SRC_INT = 0x000000000L 
#define DATA_SRC_EXT = 0x000000001L 
#define DATA_SRC_NONE = 0x00000000FL 

의 C 라이브러리의 제조를 제공하는 헤더 파일은 그래서는 질문에 저를 떠난다. 0x000000000L은 정확히 몇 자리입니까?

나는이 질문이 단순하다는 것을 알고 있습니다. 원래이 질문을 썼을 때 많은 양의 이식 가능한 C 코드를 보지 못했습니다. 나는 원래의 질문을 명확하게하기 위해받은 피드백을 토대로 시도했다.

답변

8

이들은 각각 0, 1 및 15의 값인 long입니다. 접미사 Llong 리터럴임을 알리고 접두어 0x은 16 진수 리터럴을 나타냅니다.

C#에서는 컴파일러가 이미 형식을 알고 있으므로 그에 따라 변환되기 때문에 L 접미사가 필요하지 않습니다. C 코드에서 정의는 문자열 바꾸기 만하므로 형식에 있습니다.) 그들과 함께 수행한다 :

public const long DATA_SRC_INT = 0x0; 
public const long DATA_SRC_EXT = 0x1; 
public const long DATA_SRC_NONE = 0xF; 

그러나

진수 표기 I 보통 소수점 스틱) 그러한 비트 필드의 조성 실제 통계를 (산출되지 아니

public const long DATA_SRC_INT = 0; 
public const long DATA_SRC_EXT = 1; 
public const long DATA_SRC_NONE = 15; 
+1

Ramhound : 형식은 컴파일러 용입니다. C#에서 'long'이라고 선언하면 놀라움을 얻지 않아도됩니다. 결국 같은 유형 및 값입니다. 컴파일러가 소스에서 니블 링 한 후에'L'과 16 진수 표기법은 사라집니다. 그렇다면 원래의 코드와의 포트 일관성 때문에 아마도 나쁜 생각은 아니지만 하드웨어가 실제로 신경 쓰지는 않습니다 :-) – Joey

3

을 0X가 수 있음을 의미 16 진수. 결국 L은 길다는 것을 의미합니다.

그래서 ... 표시된 숫자는 각각 0, 1 및 15입니다.