-1

こんにちは、私の仕事は基本的にcharから10進数を取得することです。たとえば、入力引数は 8751 です。どうすれば 51(ONLY) を 10 進数に変換できますか? 87 を取得する方法は知っています。

したがって、私のプログラムの出力は次のようになります。

(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;
}
4

1 に答える 1

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);
}

Prints 8751 -> 135, 81. And if num is changed, you get 81ab -> 129, 171 or a1b7 -> 161, 183.

于 2012-10-06T04:52:50.293 に答える