2012-10-06 3 views
-1

안녕 얘들 아 내 임무는 기본적으로 char에서 십진수를 얻는 것이다. 예를 들어, 입력 된 인수는 8751입니다. 어떻게 얻을 수있는 51 (유일한) 10 진수로 변환 할? 87 얻을 방법을 알고 또한 (0x8751 & 0xff) 16 진수 경우 51 가져 오는 방법을 알고. 인수에서 C++ 비트 시프트

그래서 내 프로그램의 출력은 다음과 같습니다

(0x87 & 0x7f)*128 + (0x51) 

또는

(135-128)*128 + 81 

감사

코드 :

#include <iostream> 
#include <cstdio> 


int 
main(int argc, char* argv[]) 
{ 
char* nums; 
// long sum = 0; 
for (int i = 1; i < argc; ++i) 
{ 
    nums=argv[i]; 
// long a; 
// ::sscanf(argv[i], "%lx", &a); // read hex string and form long value 
// sum += a; // same as 'sum = sum + a' 
} 
int len = strlen(nums); 

if(len<=2){ 
    unsigned long cur; 
    ::sscanf(nums, "%lx", &cur); 
    if(cur<=128){ 
     std::cout<<cur; 
    } 
} 

    if(len=4){ 
    unsigned long cur; 
    ::sscanf(nums, "%lx", &cur); 
    char tr []= "0x"; 
    //std:: cout << cur<<"\n"; 
    unsigned long cur1 = nums & 0xff; 
    unsigned long cur2 = cur >> 8; 
    if(cur1 >128){ 
     //std :: cout <<cur1<<"\n"; 
     std::cout<<0; 
    } 
    else{ 
     unsigned long result = (cur2 - 128)*128 + cur1; 
      std ::cout << result; 
    } 
    } 


    system("pause"); 
    return 0; 
} 
+0

'line 32 : error : 2 진 '연산자'에 'char *'및 'int'유형의 피연산자가 유효하지 않습니다. – user650654

답변

0

입력 4 문자 길이 항상 ? 그렇다면 ...

#include <stdio.h> 

int main(int argc, char *argv[]) { 
    char num [] = "8751"; 
    int hi, lo; 
    sscanf(num, "%2x%2x", &hi, &lo); 
    printf("%s -> %d, %d\n", num, hi, lo); 
} 

인쇄 8751 -> 135, 81. num이 변경되면 81ab -> 129, 171 또는 a1b7 -> 161, 183이됩니다.

관련 문제