C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Восьмиричная сист.счисления, Не могу быстро преобразовать
Schumi
Отправлено: 06.10.2004, 20:40


Машинист паровоза

Группа: Участник
Сообщений: 206



Можно так сделать:
AnsiString Str="xFFFF"
int N=StrToInt(Str)
И всё хорошо получится N=65535
А восьмиричное число начинается с нуля.И если я задам int N=017777.
То она правильно поймет,и в памяти будет тоже хранится N=65535.
Но такая попытка не пройдёт:
AnsiString Str="017777"
int N=StrToInt(Str)
В смысле она пройдет,но там будет 17777,вместо 65535.
Как правильно задать восьмиричное число и преобразовать его в десятичное.
olegenty
Отправлено: 07.10.2004, 12:42


Ветеран

Группа: Модератор
Сообщений: 2412



почитай спецификацию sscanf — точно знаю, что эта функция способна строку "017777" распознать, как int = 65535
Admin
Отправлено: 07.10.2004, 13:32


Владимир

Группа: Администратор
Сообщений: 1190



Недавно пришлось писать прогу, там преобразовывал
и в двоичное и в шестнадцатеричное и обратно.

В шестнадцатеричное(строку):

CODE

Edit3->Text = Format("%x",ARRAYOFCONST((Edit1->Text.ToInt())));


в двоичное(строку):

CODE

#include <bitset>
using namespace std;

bitset <32> bs; AnsiString s="";

bs = Edit1->Text.ToInt();
for(int j=31; j>=0; j--){ if(bs.test(j)) s = s + '1'; else s = s + '0'; }
Edit2->Text = s;



А в восьмеричное — можно применить функцию sprintf
CODE

AnsiString S = e1->Text;
Edit8->Text = S.sprintf("%o",S.ToInt());



А пример прямого преобразования на Delphi:
http://delphiworld.narod.ru/base/int_to_oct.html

Отредактировано Admin — 07/10/2004, 14:35
Schumi
Отправлено: 07.10.2004, 18:01


Машинист паровоза

Группа: Участник
Сообщений: 206



Да,про sprintf я знаю,что там можно из десятичной системы преобразовать в 8 и 16.

Просто хочется докавырятся:ну раз в хелпе написано,что StrToInt может
преобразовывать из 8,10,16 в число.Значит может,или должно smile.gif .
Значит вопрос по поводу 8 сист.счисл. остаётся открытый.

А по поводу преобразования в двоичную (Admin): интересно,как там будет по быстродействию?
olegenty
Отправлено: 08.10.2004, 06:50


Ветеран

Группа: Модератор
Сообщений: 2412



sscanf
olegenty
Отправлено: 08.10.2004, 06:52


Ветеран

Группа: Модератор
Сообщений: 2412



извините, глюки с кешем прокси (или с сайтом — не пойму) — посты иногда по полсуток не вижу... думал, вчера не прошло...
AVC
Отправлено: 08.10.2004, 10:30


Ветеран

Группа: Модератор
Сообщений: 1583



2olegenty
QUOTE
извините, глюки с кешем прокси (или с сайтом — не пойму)

С твоим прокси. Сайт работает нормально. У меня такое было при тестировании винроутера или винпрокси под виндой.
Георгий
Отправлено: 08.10.2004, 13:23


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



есть ещё функция strtol, которая может строку в число переводить в режиме автоопределения системы счисления:
CODE
struct test{int val, char* str};
test arr[]={ {13, "13"}, {13,"0xD"}, {13,"015"} };
const int len = sizeof(arr)/sizeof(arr[0]);
for(int i=0; i < len; ++i)
{
const test& elem = arr[i];
if (elem.val != strtol(elem.str, NULL, 0) throw AnsiString("test fauled");
};

последний аргумент — система счисления. подробнее в хелпе.

Вернуться в Вопросы программирования в C++Builder