2012-06-28 7 views
0

내가해야 할 일은 다음과 같습니다.16 진수 배열에 사용자 입력 16 진수

const char *arrayHex[4]; 
for(int i = 0; i < 5; i++) 
{  
cin << uHex; 
arrayHex[i] = uHex; 
} 

는하지만 진수는 \의 X로 이스케이프 할 arrayHex의 구성원이 필요합니다. 그 일을 어떻게 하죠? 입력이 41 인 경우 값이 "\의 X41"

+3

루프가 잘못되었습니다! 귀하의 배열은 4 원소지만, 당신은 i = 0에서 4, 즉 5 회 반복합니다. –

+0

... 그리고'arrayHex'는 char 포인터의 배열입니다. 'uHex'도 포인터입니까? 아니면 char 배열을 생성 했습니까? 후자의 경우, 그 배열에 할당하고 있기 때문에'const'는 생략해야합니다. – eran

+0

@Michael 예제 입력과 출력을 게시 하시겠습니까? – anatolyg

답변

0
것처럼

이 정말 모호하게되었다

, 편집, 내가 "A"로 인쇄 결과를 원하는, (희망)

를 해결하기 위해

#include <iostream> 
#include <string> 
#include <cstdlib> // for strtol() 
#include <cstdio> // for printf() 
#define countof(array) (sizeof(array)/sizeof(array[0])) 

int main() 
{ 
    std::string uHex; 
    long arrayValues[4]; 
    for(int i = 0; i < countof(arrayValues); ++i) 
    { 
     std::cin >> uHex; 
     char* end; 
     arrayValues[i] = std::strtol(uHex.c_str(), &end, 16); 
     // At this point, we expect end to be pointing at the '\0' 
     // (the C-string nul terminator). If it's not, then we have 
     // invalid chars in our input, and arrayValues[i] is bogus. 
     if (*end != '\0') 
     { 
      std::cout << "Invalid characters: \"" << uHex << "\" (please try again)\n"; 
      --i; // compensate for the ++i above to re-try this again 
     } 
    } 

    for(int i = 0; i < countof(arrayValues); ++i) 
    { 
     std::cout << i << " --> " << arrayValues[i] << " --> " 
        << static_cast<char>(arrayValues[i]) << '\n'; 
//  std::printf("%d --> %d --> %c\n", i, arrayValues[i], arrayValues[i]); 
    } 
} 

정확한 출력을 두 가지 방법으로 출력하고 있습니다. cout 또는 printf()를 사용합니다. 개인적으로 printf()는 내가 먼저 배웠던 것이 아니지만, cout을보다 유연하게 만들 수 있기 때문에 printf() 형식화 된 출력이 cout보다 덜 자세한 설명과 함께 훨씬 표현력이 풍부하기 때문에 (MOST 내장 유형의 경우) 훨씬 더 표현력이 풍부하기 때문에 사용자 정의 유형에 대한 출력 함수. 그러나 컴파일러가 printf()/scanf() 형식 매개 변수 유형 검사 (GCC가 가능하면 가능)를 수행하지 않으면 일치하지 않는 유형의 흥미로운 결과를 쉽게 만들 수 있고 비 결정적입니다. 형식 문자열보다 적은 인수를 지정하여 SEGV 생성기를 쉽게 쉽게 생성 할 수 있습니다.

+0

정확하게 필요한 것은 아닙니다. 16 진수로 이스케이프해야합니다. 예를 들어, 사용자가 41을 입력하면 41이 저장된 값을 인쇄 할 때 "A"가 인쇄됩니다. – Michael

+0

@Michael - 오케이, 지금 생각하고있는 바를 수행하도록 변경했습니다. 당신이 그것을 깨닫지 못하는 경우에, 숫자는 (int),'long','unsigned int'와 같은 순수 숫자 (바이너리) 형태로 컴퓨터에 저장 될 수 있습니다. . std :: string 또는 char [] 배열 (직접 또는 char *를 통해)로 저장된 숫자는 CPU에 관한 한 실제로 숫자가 아닙니다. CPU는 문자 숫자로 저장된 숫자를 직접 덧셈/뺄셈/곱셈/나눗셈 등을 할 수 없습니다. 순수한 숫자 (이진) 형식에서 숫자는 "십진법"또는 "16 진수"가 아니며 단순히 순수한 숫자입니다. – phonetagger

+0

... 숫자 값은 "십진"또는 "16 진수"형식으로 만 표현 (예 : 인쇄) 될 수 있습니다. "십진수"또는 "16 진수"형식 (예 : std :: string 또는 char []/char *)으로 숫자를 저장하는 경우 CPU가 이해할 수있는 형식으로 저장하지 않습니다. 번호. 그러나 고정밀 과학/공학 계산, 데이터베이스 등을 비롯한 도메인 별 이유로 다른 저장 형식 (std :: string/char []/char * 포함)이 사용되는 경우 – phonetagger