2013-01-14 6 views
0

나는이 같은 문자열이 있습니다 입력 진수 문자열은 한 번에

315c4eeaa8b5f8aaf9174145bf43e1784b8fa00dc71d885a804e5ee9fa40b16349c146fb778cdf2d3aff021dfff5 

파일에서 한 번 매 2 개 문자 바이트의 16 진수 표현을 염두에 문자열 객체 유지에 읽을 수있는 방법이 있나요 ? 나는. 16 진수에서 16 진수로 변환하는 데 필요한 읽기가 필요합니다.

업데이트
얘들 아, 내가 물어 본 내용을주의 깊게 읽으십시오.
변환 함수를 작성하고 문자열을 따라 루핑 할 수 있습니다.
BUT의 문자열 에 16 진수 문자열을 읽어야합니다.
루핑이 없습니다. 손에 의한 전환이 없습니다.
와 비슷한 것 cin >> ...some string variable...
감사합니다.

UPDATE2는
내가 문자열 "315c4eeaa8b5"을 상상해보십시오. cin >> string_var과 같은 것을 쓰고 정확히 "'0x31','0x5c','0x4e','0xea','0xa8','0xb5'"을 포함하는 string_var를 얻고 싶습니다. 이 마지막 번호는 서수 std::string입니다. 나는. 0x31,0x5c,etc은 문자 코드입니다.
물건을 더 분명하게 보이기를 바랍니다.

+1

업데이트로 인해 더 명확 해지지 않았습니다. 이 데이터를 hex-ascii *에서 * *로 변환 하시겠습니까? 그것은 당신이 hex-ascii에서 byte-equiv로 변환 된 char 쌍을 원하는 것처럼 들리지만, 제공하는 샘플에서는 실제 ascii chars가됩니다. 그 맞습니까? 모든 루프없이, 변환없이, 그리고 일부 추출 연산자 안에 집어 넣을 수 있습니다.? – WhozCraig

+0

예, 정확히 무엇인지 알고 있습니다. 그리고 아니요, 간단한 추출 연산자를 사용하면 이해할 수 없습니다 (사용자가이 코드를 작성하고 추출기 내에서 2 문자 대 순차 코드 변환을 수행하지 않는 한). std lib에서 원하는 것을 수행 할 은색 총알이 없습니다. 그리고 이미 변환 루프를 작성/작성 했으므로 다른 것이 있습니까? – WhozCraig

+0

나는 내가이 변환을 내 자신만으로해야한다는 것을 확실히 요구했다. – OlegG

답변

0

당신은 진수로 구문 분석 IStream을 :: opeartor >>을 표준 : 육각 조작으로 사용할 수 있습니다 :

ifstream in("..."); 
char buffer[3]; 
vector<char> chars; 

while (in.read(buffer, 2)) 
{ 
    buffer[2] = '\0'; 

    char c; 
    istringstream(buffer) >> hex >> c; 
    chars.push_back(c); 
} 
1

어느 쪽이든 당신은 코드 뭔가 위 또는 당신은 이미 종료 무언가를 사용합니다. C++ 입출력 스트림을 사용하는 경우 Boost.IOStreams 라이브러리, 특히 Filtering Streams 개념을 살펴볼 것을 제안합니다. 2.2.5.2 input_filter 확장 예제 탭을 16 진수 입력 필터 구현의 기본으로 사용할 수 있습니다.