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 в число.Значит может,или должно .
Значит вопрос по поводу 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");
}; |
последний аргумент — система счисления. подробнее в хелпе.
|
|