2016-07-19 4 views
1

텍스트 파일에서 UINT64로 입력 된 숫자의 (10 진수가 중요하다면) 문자열 표현을 내 데이터 객체로 변환해야합니다.C++ : std :: string을 UINT64로 변환하십시오.

size_t startpos = num.find_first_not_of(" "); 
    size_t endpos = num.find_last_not_of(" "); 
    num = num.substr(startpos, endpos-startpos+1); 
    UINT64 input; 
    //convert num to input required here 

atoi()와 비슷한 방식으로 std :: string을 UINT64로 변환 할 수있는 방법이 있습니까?

감사합니다.

편집 : 아래의 작업 코드.

size_t startpos = num.find_first_not_of(" "); 
size_t endpos = num.find_last_not_of(" "); 
num = num.substr(startpos, endpos-startpos+1); 
UINT64 input; //= std::strtoull(num.cstr(), NULL, 0); 

std::istringstream stream (num); 
stream >> input; 
+0

uint64에 10 진수를 저장 하시겠습니까? –

+0

그것은 기존 구조를 사용하고있는 프로젝트를위한 것입니다. 그것은 내 경우에 객체의 구조에 불과합니다. –

답변

2

이 작업을 수행하는 적어도 두 가지 방법이 있습니다 :

  1. 우리의 오랜 친구는 >> 연산자를 std::istringstream를 구축하고, 사용은.

  2. 그냥 직접 변환하십시오. 한 번에 하나씩 모든 자릿수를 파싱하여 단일 정수로 변환합니다. 이것은 아주 좋은 운동입니다. 그리고 이것은 부호없는 값이기 때문에 걱정할 숫자가 없습니다. 저는 이것이 컴퓨터 과학 수업의 기본 숙제가 될 것이라고 생각합니다. 적어도 그것은 내 일이었습니다.

+0

istringstream 방법이 나를 위해 일했습니다. 고맙습니다 :) –

2

strtoull 또는 _strtoui64()을 사용하십시오. 예 :

std::string s = "1123.45"; 
__int64 n = std::strtoull(s.c_str(),NULL,0); 
+0

감사! std :: string의 시작과 끝으로 포인터를 가져올 수있는 방법을 검색하려고하지만 아직 아무것도 찾지 못했습니다. 내가 이걸 어떻게 얻을 수 있는지 알고 있니? –

+0

@IpqD 답변을 업데이트했습니다. 문자열에 관해서는 [string.begin()] (http://www.cplusplus.com/reference/string/string/begin/) 및 [string.end()] (http : //www.cplusplus .com/reference/string/string/end /) 반복자. –

+0

다시 한번 감사드립니다 :). 라이브러리를 포함 시켰지만, 내 프로젝트에서는 std에 멤버 "strtoull"이 없다고합니다. 이것이 내가 잘못한 짓인지 알아 주겠습니까? 또한 __int64와 UINT64의 차이점이 있습니까? –

관련 문제