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


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


Проверить к сожалению сейчас не могу.
...
Рейтинг: 0 / 0
13.08.2013, 08:07
    #38364074
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Иван 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
13.08.2013, 22:07
    #38365383
Иван guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Код: plaintext
1.
2.
int kuku = atoi(omg);
printf("%i",kuku);


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

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

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

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

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

ps.
маловероятно конечно, но вдруг? Попробуйте ка вот так:
printf("%s", omg);
...
Рейтинг: 0 / 0
14.08.2013, 10:19
    #38365693
Иван guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Откопал. Это десятичное в двоичной кодировке, 16 цифр в числе, 5 цифр в дробной части.
...
Рейтинг: 0 / 0
14.08.2013, 11:46
    #38365838
Иван guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Иван guestОткопал. Это десятичное в двоичной кодировке, 16 цифр в числе, 5 цифр в дробной части.
...и fixed point.
...
Рейтинг: 0 / 0
14.08.2013, 11:57
    #38365866
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Иван guest, BCD арифметика?
...
Рейтинг: 0 / 0
14.08.2013, 12:18
    #38365938
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Иван 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
14.08.2013, 18:35
    #38366680
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Иван 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
14.08.2013, 18:44
    #38366691
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
и второй вариант - выводить на лету

навскидку так:
Код: 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
14.08.2013, 21:32
    #38366836
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Проверку на запретные комбинации можно поставить. Это даст возможность
детектить где число BCD а где просто мусор. Так. Навсякий.
...
Рейтинг: 0 / 0
14.08.2013, 21:42
    #38366846
Иван guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
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
14.08.2013, 23:02
    #38366912
Иван guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Там точно BCD (нарыл в доках)!!!
chabapok, код версии "на лету" выводит козибошки :(
...
Рейтинг: 0 / 0
15.08.2013, 00:03
    #38366951
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
авторкод версии "на лету" выводит козибошки :(

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

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

если это данные нереальные, то ничего сказать нельзя ни про это число, ни про мою верисю. Надо заполнить массив реальными и только потом пробовать.
...
Рейтинг: 0 / 0
15.08.2013, 03:38
    #38366994
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Иван guestВывелось 0x0004f203000105А вместо этого, что должно было вывестись?
...
Рейтинг: 0 / 0
15.08.2013, 06:11
    #38367006
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод char
Иван 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
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывод char / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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