내가해야 할 일은 다음과 같습니다.16 진수 배열에 사용자 입력 16 진수
const char *arrayHex[4];
for(int i = 0; i < 5; i++)
{
cin << uHex;
arrayHex[i] = uHex;
}
는하지만 진수는 \의 X로 이스케이프 할 arrayHex의 구성원이 필요합니다. 그 일을 어떻게 하죠? 입력이 41 인 경우 값이 "\의 X41"
내가해야 할 일은 다음과 같습니다.16 진수 배열에 사용자 입력 16 진수
const char *arrayHex[4];
for(int i = 0; i < 5; i++)
{
cin << uHex;
arrayHex[i] = uHex;
}
는하지만 진수는 \의 X로 이스케이프 할 arrayHex의 구성원이 필요합니다. 그 일을 어떻게 하죠? 입력이 41 인 경우 값이 "\의 X41"
, 편집, 내가 "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 생성기를 쉽게 쉽게 생성 할 수 있습니다.
정확하게 필요한 것은 아닙니다. 16 진수로 이스케이프해야합니다. 예를 들어, 사용자가 41을 입력하면 41이 저장된 값을 인쇄 할 때 "A"가 인쇄됩니다. – Michael
@Michael - 오케이, 지금 생각하고있는 바를 수행하도록 변경했습니다. 당신이 그것을 깨닫지 못하는 경우에, 숫자는 (int),'long','unsigned int'와 같은 순수 숫자 (바이너리) 형태로 컴퓨터에 저장 될 수 있습니다. . std :: string 또는 char [] 배열 (직접 또는 char *를 통해)로 저장된 숫자는 CPU에 관한 한 실제로 숫자가 아닙니다. CPU는 문자 숫자로 저장된 숫자를 직접 덧셈/뺄셈/곱셈/나눗셈 등을 할 수 없습니다. 순수한 숫자 (이진) 형식에서 숫자는 "십진법"또는 "16 진수"가 아니며 단순히 순수한 숫자입니다. – phonetagger
... 숫자 값은 "십진"또는 "16 진수"형식으로 만 표현 (예 : 인쇄) 될 수 있습니다. "십진수"또는 "16 진수"형식 (예 : std :: string 또는 char []/char *)으로 숫자를 저장하는 경우 CPU가 이해할 수있는 형식으로 저장하지 않습니다. 번호. 그러나 고정밀 과학/공학 계산, 데이터베이스 등을 비롯한 도메인 별 이유로 다른 저장 형식 (std :: string/char []/char * 포함)이 사용되는 경우 – phonetagger
루프가 잘못되었습니다! 귀하의 배열은 4 원소지만, 당신은 i = 0에서 4, 즉 5 회 반복합니다. –
... 그리고'arrayHex'는 char 포인터의 배열입니다. 'uHex'도 포인터입니까? 아니면 char 배열을 생성 했습니까? 후자의 경우, 그 배열에 할당하고 있기 때문에'const'는 생략해야합니다. – eran
@Michael 예제 입력과 출력을 게시 하시겠습니까? – anatolyg