singlepost

перевод char из десятичной в восьмеричную/C++ << На главную или назад  

Такое дело:
Например есть массив

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)

11 ответов в теме “перевод char из десятичной в восьмеричную/C++”

  1. 11
    Леонид Максимов ответил:

    нет. у вас в буфере, как не сложно догадаться, лежит строковое восьмеричное представление адреса памяти, записанного в указателе uch.

  2. 10
    Андрюха Kolesnikow ответил:

    то-же, что и в uch, только по формату "%o".
    Нет?

  3. 9
    Леонид Максимов ответил:

    что у вас в буфере, по вашему мнению?

  4. 8
    Андрюха Kolesnikow ответил:

    может вместо "%o" надо че-то другое ставить???

  5. 7
    Андрюха Kolesnikow ответил:

    господа, не работает, однако:(

    Задаю массив:

    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
    но это фигня какая-то:(((

  6. 6
    Леонид Максимов ответил:

    man sprintf

  7. 5
    Андрюха Kolesnikow ответил:

    sprintf(somestr, "%o",uch[i]);

    Куда это вляпать?
    вместо IntToStr(uch[i]) не получается.
    вообще дойдя до somestr ошибку выдает.

  8. 4
    Леонид Максимов ответил:

    +1

  9. 3
    Алексей Терентьев ответил:

    можно сделать через sprintf(somestr, "%o",uch[i]);

  10. 2
    Василий Some ответил:

    прочитай справку на функцию IntToStr

  11. 1
    Андрюха Kolesnikow ответил:

    Чё никто не знает?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.