Такое дело:
Например есть массив
unsigned char* uch = new unsigned char[5];
uch[0] = 0100; // в 10ной системе = 64, в 16ной системе = 0×40
uch[1] = 020;
uch[2] = 010;
uch[3] = 02;
uch[4] = 023;
пусть надо вывести его в Memo1 поэлементно, но каждый элемент массива надо выводить именно в ВОСЬМЕРИЧНОЙ системе счисления.
Если написать
for (int i=0; i< strlen(uch); i++){
Memo1->Lines->Text = Memo1->Lines->Text + (IntToStr(uch[i])) + " ";
};
то элементы будут выводиться в 10й системе:
64 16 8 2 19
Как бы сделать, чтобы именно была строка:
100 20 10 2 23
???
(пример привел для простоты, массив обязательно char)
22 февраля 2010 в 20:04
нет. у вас в буфере, как не сложно догадаться, лежит строковое восьмеричное представление адреса памяти, записанного в указателе uch.
22 февраля 2010 в 8:03
то-же, что и в uch, только по формату "%o".
Нет?
21 февраля 2010 в 21:05
что у вас в буфере, по вашему мнению?
21 февраля 2010 в 19:03
может вместо "%o" надо че-то другое ставить???
21 февраля 2010 в 17:03
господа, не работает, однако:(
Задаю массив:
unsigned char* uch = new unsigned char[5];
uch[0] = 0200;
uch[1] = 050;
uch[2] = 030;
uch[3] = 015;
uch[4] = 0150;
потом:
for (int i=0; i < strlen(uch); i++){
Memo1->Lines->Text = Memo1->Lines->Text + (IntToStr((uch[i]))) + " ";
};
Получаем:
128 40 24 13 104
Если после объявления массива поставить
unsigned char buffer[50];
sprintf(buffer, "%o", uch);
puts(buffer);
и вывести в мэмо buffer
for (int i=0; i < strlen(bufwr); i++){
Memo1->Lines->Text = Memo1->Lines->Text + (IntToStr((buffer[i]))) + " ";
};
то получается:
52 54 52 49 52
но это фигня какая-то:(((
18 февраля 2010 в 9:04
man sprintf
18 февраля 2010 в 9:01
sprintf(somestr, "%o",uch[i]);
Куда это вляпать?
вместо IntToStr(uch[i]) не получается.
вообще дойдя до somestr ошибку выдает.
17 февраля 2010 в 22:01
+1
17 февраля 2010 в 18:02
можно сделать через sprintf(somestr, "%o",uch[i]);
17 февраля 2010 в 18:00
прочитай справку на функцию IntToStr
17 февраля 2010 в 17:05
Чё никто не знает?