с ++ бит сдвиг в аргументе

Эй, ребята, моя задача в основном получить десятичную дробь от символа. Например, входной аргумент 8751. Как я могу получить 51 (ТОЛЬКО), преобразованный в десятичную? Я знаю, как получить 87, я также знаю, как получить 51, если он был в шестнадцатеричном виде, как (0x8751 & 0xff).

Таким образом, результат моей программы будет:

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

-1

Решение

Всегда ли ввод 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,

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector