일부 ASCII가 아닌 문자가있는 문자열 (iso 8859-1), 정수 또는 2 진수로 변환하는 방법이 있습니까? "값 (242) \ 242 \ 5 = \ 377"비 ASCII char 또는 C++의 정수
I 이진 242 \ 242 \ 377 \ 변환해야(나는 Atol에 또는 strtol 함수 그러나 케이으로 시도 :
예
STR이 텍스트가 't 작업)
감사
일부 ASCII가 아닌 문자가있는 문자열 (iso 8859-1), 정수 또는 2 진수로 변환하는 방법이 있습니까? "값 (242) \ 242 \ 5 = \ 377"비 ASCII char 또는 C++의 정수
I 이진 242 \ 242 \ 377 \ 변환해야(나는 Atol에 또는 strtol 함수 그러나 케이으로 시도 :
예
STR이 텍스트가 't 작업)
감사
문자는 이미 숫자/이진 - 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를 타고 리터럴.
아스키와 바이너리가 혼합되어 있다는 사실은 그것이 비표준이라는 것을 의미합니다.
관습에 따라 플레이해야합니다. "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 부분에 설명되어 있습니다.
귀하의 요구 사항에 혼란 스럽습니다. 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로 사용하십시오.
그렇지 않은 경우 요구 사항이나 질문을 명확히하십시오. 달성하고자하는 것을 보여주는 예제 프로그램 조각을 제공하십시오 (의사 코드도 작동 할 것입니다).
어떻게이 문자열을 저장 하시겠습니까? –
const char * myString = 텍스트 -> getText() .c_str(); – ger123
빠른 Google을 사용하여 ISO 8959를 찾을 수 없었습니다. ISO 8859의 오타였습니까? 그렇다면 캐릭터 테이블은 여기에 있습니다 : http://en.wikipedia.org/wiki/ISO_8859-1 –