powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывод char
21 сообщений из 21, страница 1 из 1
Вывод char
    #38363909
Иван guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго вечера!
Имеется такая штука:
Код: plaintext
1.
        char omg[11]; // d16.5


Как её правильно вывести на экран через printf или cout?
...
Рейтинг: 0 / 0
Вывод char
    #38363977
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Успех мероприятния зависит от того что внутри. Там ASCIIZ-строка? Или там
возможно нечто произвольное вроде информационного мусора?
...
Рейтинг: 0 / 0
Вывод char
    #38363981
Иван guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там число!
Поковырялся в форуме, вроде бы можно сделать так:
Код: plaintext
1.
2.
int kuku = atoi(omg);
printf("%i",kuku);


Проверить к сожалению сейчас не могу.
...
Рейтинг: 0 / 0
Вывод char
    #38364074
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван guestТам число!
Поковырялся в форуме, вроде бы можно сделать так:
Код: plaintext
1.
2.
int kuku = atoi(omg);
printf("%i",kuku);


Проверить к сожалению сейчас не могу.Число 88 бит или строка? Функция atoi:
Код: plaintext
1.
2.
3.
int atoi (const char * str);
Convert string to integer
Parses the C-string str interpreting its content as an integral number, which is returned as a value of type int.

Число 88бит в hex вывести легко:
Код: plaintext
1.
2.
3.
4.
5.
6.
    cout<<"0x"<<hex;
    for(int i=0;i<11;i++)
    {
        cout<<(int)omg[10-i];// это для платформы 8086
    }
    cout<<endl;

...
Рейтинг: 0 / 0
Вывод char
    #38365383
Иван guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
int kuku = atoi(omg);
printf("%i",kuku);


Так не выходит. По вопросу 88 бит или строка не могу сказать, т.к. новичок. По идее там 16 полубит (d16.5), что значит d я не знаю.
Код: plaintext
1.
int atoi (const char * str);

- вот так ругается, тоже не выходит.
...
Рейтинг: 0 / 0
Вывод char
    #38365388
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16 полубит это хорошо... это пять... это даже шесть косяков и вовсе не с табаком.

Иван guest, почитай учебник, пожалуйста. Что такое биты, байты и как они сочетаются с цифрами и буквами.
Потом почитай в учебнике главу про строки и ASCIIz.
До тех пор пока ты не прочитаешь учебник ты не поймешь ни одного ответа который тебе дадут.
...
Рейтинг: 0 / 0
Вывод char
    #38365402
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Но слово полубит - хорошее
...
Рейтинг: 0 / 0
Вывод char
    #38365488
Иван guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тролли!
У меня вообще гуманитарное высшее, должны дань уважения отдавать :)
PS пошёл RTFMить.
...
Рейтинг: 0 / 0
Вывод char
    #38365619
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
88битное число не влезет ни в int ни даже в long long
никакое atoi в данном случае не справится - число слишком большое. Надо искать либу для работы с большими числами и пользовать ее.

что такое d16.5? По всей видимости, это формат известный только автору.

ps.
маловероятно конечно, но вдруг? Попробуйте ка вот так:
printf("%s", omg);
...
Рейтинг: 0 / 0
Вывод char
    #38365693
Иван guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Откопал. Это десятичное в двоичной кодировке, 16 цифр в числе, 5 цифр в дробной части.
...
Рейтинг: 0 / 0
Вывод char
    #38365838
Иван guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван guestОткопал. Это десятичное в двоичной кодировке, 16 цифр в числе, 5 цифр в дробной части.
...и fixed point.
...
Рейтинг: 0 / 0
Вывод char
    #38365866
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван guest, BCD арифметика?
...
Рейтинг: 0 / 0
Вывод char
    #38365938
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван guestОткопал. Это десятичное в двоичной кодировке, 16 цифр в числе, 5 цифр в дробной части.база данных decimal(16,5) ?
вот это сделай
Код: plaintext
1.
2.
3.
4.
5.
6.
cout<<"0x"<<hex;
    for(int i=0;i<11;i++)
    {
        cout<<(int)omg[10-i];// это для платформы 8086
    }
    cout<<endl;

напиши что вывелось и что там реально содержится
...
Рейтинг: 0 / 0
Вывод char
    #38366680
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван guestОткопал. Это десятичное в двоичной кодировке, 16 цифр в числе, 5 цифр в дробной части.

16 цифр в числе - 8 байт
5 цифр в дробной части - 3 байта (один полубайт, получается, не использован)

8+3=11
сходится! ваше предположение правдоподобно.

если так, можно сначала отконвертить BCD в число, потом вывести число.

навскидку как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
unsigned int fromBCD(char * str, int symbolCount){
unsigned int result=0;
for(int i=0; i<symbolCount; i++){

int x = ((i&1)==0)? str[i] & 0xf : (str[i]>>4) & 0xf;
result = 10*result+x;
}
}


int celoe = fromBCD( omg, 16);
int drob = fromBCD( &omg[8], 5);

printf("%d.%d\n",celoe, drob );
...
Рейтинг: 0 / 0
Вывод char
    #38366691
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и второй вариант - выводить на лету

навскидку так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
unsigned int printBCD(char * str, int symbolCount){
unsigned int result=0;
for(int i=0; i<symbolCount; i++){

int x = '0'+((i&1)!=0)? str[i] & 0xf : (str[i]>>4) & 0xf; //в предыдущем примере вроде ошибка, тоже надо != вместо ==
printf("%c", x);

}
}


printBCD( omg, 16);
printf(".");
printBCD( &omg[8], 5);
printf("\n");



как-то так, главное - идея.
кстати, если он хрень выводить будет вместо цифр, значит не bcd у вас.
...
Рейтинг: 0 / 0
Вывод char
    #38366836
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверку на запретные комбинации можно поставить. Это даст возможность
детектить где число BCD а где просто мусор. Так. Навсякий.
...
Рейтинг: 0 / 0
Вывод char
    #38366846
Иван guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m_SlaИван guestОткопал. Это десятичное в двоичной кодировке, 16 цифр в числе, 5 цифр в дробной части.база данных decimal(16,5) ?
вот это сделай
Код: plaintext
1.
2.
3.
4.
5.
6.
cout<<"0x"<<hex;
    for(int i=0;i<11;i++)
    {
        cout<<(int)omg[10-i];// это для платформы 8086
    }
    cout<<endl;

напиши что вывелось и что там реально содержится
Вывелось 0x0004f203000105
...
Рейтинг: 0 / 0
Вывод char
    #38366912
Иван guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там точно BCD (нарыл в доках)!!!
chabapok, код версии "на лету" выводит козибошки :(
...
Рейтинг: 0 / 0
Вывод char
    #38366951
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкод версии "на лету" выводит козибошки :(

Ну, никто не обещал что вы попали в сказку. Это всего-лишь версия от которой можно отталкиваться. Не запускалась она ни разу.

Если у вас там 0x0004f203000105 , и это реальные данные, а не что-то установленное "от фонаря", то это не BCD, поскольку в BCD символ f - запрещен, а он у вас есть.

если это данные нереальные, то ничего сказать нельзя ни про это число, ни про мою верисю. Надо заполнить массив реальными и только потом пробовать.
...
Рейтинг: 0 / 0
Вывод char
    #38366994
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван guestВывелось 0x0004f203000105А вместо этого, что должно было вывестись?
...
Рейтинг: 0 / 0
Вывод char
    #38367006
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван guestm_Slaпропущено...
база данных decimal(16,5) ?
вот это сделай
Код: plaintext
1.
2.
3.
4.
5.
6.
cout<<"0x"<<hex;
    for(int i=0;i<11;i++)
    {
        cout<<(int)omg[10-i];// это для платформы 8086
    }
    cout<<endl;

напиши что вывелось и что там реально содержится
Вывелось 0x0004f203000105и замени код на этот
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    char table[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    cout<<"0x";
    for(int i=0;i<11;i++)
    {
        cout<<table[ (omg[10-i]>>4)&15 ]<<table[ omg[10-i]&15 ];
    }
    cout<<endl;

старый вариант неправильно выводит
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывод char
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]