2010-03-01 4 views
-1

일부 ASCII가 아닌 문자가있는 문자열 (iso 8859-1), 정수 또는 2 진수로 변환하는 방법이 있습니까? "값 (242) \ 242 \ 5 = \ 377"비 ASCII char 또는 C++의 정수

I 이진 242 \ 242 \ 377 \ 변환해야

(나는 Atol에 또는 strtol 함수 그러나 케이으로 시도 :

STR이 텍스트가 't 작업)

감사

+0

어떻게이 문자열을 저장 하시겠습니까? –

+0

const char * myString = 텍스트 -> getText() .c_str(); – ger123

+0

빠른 Google을 사용하여 ISO 8959를 찾을 수 없었습니다. ISO 8859의 오타였습니까? 그렇다면 캐릭터 테이블은 여기에 있습니다 : http://en.wikipedia.org/wiki/ISO_8859-1 –

답변

4

문자는 이미 숫자/이진 - C에서, 문자는 정수 유형입니다.

문자열 리터럴 "\377\242\242"이 12가 아닌 3자를 사용하면 혼동을 줄 수 있습니다. C에서는 0에서 7 사이의 1-3 자리가 8 진수 이스케이프 시퀀스입니다.

경우 인덱스 소개 문자열 "\377\242\242", 당신이 얻을 다음과 같은 결과 (의사 코드) :

"\377\242\242"[0] == 255 == '\377';

"\377\242\242"[1] == 162 == '\242';

"\377\242\242"[2] == 162 == '\242';

는 C 문자의 자세한 내용을 살펴 here를 타고 리터럴.

0

아스키와 바이너리가 혼합되어 있다는 사실은 그것이 비표준이라는 것을 의미합니다.
관습에 따라 플레이해야합니다. "value 5 ="문자열 뒤에 little-endian 4 바이트 정수가있는 경우 관례에 따라 포인터를 놓고 정수로 캐스팅 할 수 있습니다. 리틀 엔디안 시스템.

귀하의 경우에는

에게 (3 바이트)

int threeBytesToInt(char* p) 
{ 
    return ((unsigned int)p[0]) * (255L * 255L) + ((unsigned int)p[1]) * 255L + ((unsigned int)p[2]); 
} 

는 오른쪽 대회

가능하면 주어진 트릭을 할 이러한 구조를 피하거나 휴대 성 문제를 최소화하기 위해 "깨끗한"대회에 갈 수있다. 깨끗한 관행에서 이진 데이터의 형식은 ascii 부분에 설명되어 있습니다.

0

귀하의 요구 사항에 혼란 스럽습니다. ISO8859 표에 따르면, 8 진수 값 (377, 242)은 숫자를 나타내지 않는다. '0'에서 '9'. 따라서 strtoul을 사용하면 3 문자를 하나의 정수로 변환 할 수 있습니다.

8 진수 값 377, 242 및 242는 3 개의 8 비트 quantites 또는 24 비트 합계를 나타냅니다. 이 비트 양은 2의 거듭 제곱이 아니므로 모든 비트가 이진으로 변환되지는 않습니다. (24 비트는 색상 값을 설명하는 데 공통적이지만).

값을 8 진수 377의 경우 '11111111'과 같이 2 진수로 표시 하시겠습니까? 이 경우 std::strtoul을 2로 사용하십시오.

그렇지 않은 경우 요구 사항이나 질문을 명확히하십시오. 달성하고자하는 것을 보여주는 예제 프로그램 조각을 제공하십시오 (의사 코드도 작동 할 것입니다).

관련 문제