Форум программистов, компьютерный форум CyberForum.ru

Перевод из 16 в 2 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Cee K
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 46
29.04.2012, 19:15     Перевод из 16 в 2 #1
C++
1
2
3
4
5
6
7
8
9
10
11
char* DecToBin(int x, char* str)
{
    int i;
    for (i = sizeof(x)*8-1; i>=0; i--)
    {
        str[i] = (x&1 == 1) ? '1' : '0';
        x = x >> 1;
    }
    str[sizeof(x)*8] = '\0';
    return str;
}
как,изенив такой алгоритм, перевести 16-е число в 2-е?(сейчас алгоритм работает для 10-го)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2012, 19:15     Перевод из 16 в 2
Посмотрите здесь:

Перевод на С++ C++
C++ перевод в С
перевод из С++ в Си C++
C++ Перевод из 10 си в 11-16
Перевод из 16 сс в 4 сс C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
29.04.2012, 20:14     Перевод из 16 в 2 #2
Цитата Сообщение от Cee K Посмотреть сообщение
как,изенив такой алгоритм, перевести 16-е число в 2-е?(сейчас алгоритм работает для 10-го)
перевод из шестнадцатиричной в двоичную проихходит по гораздо более простому алгоритму. Просто по очереди печатаются тетрады

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
char* HexToBin(char* str_hex, char* str_bin)
{
    int i;
    char tetrad;
    for (i =0; i<strlen(str_hex); i++)
    {
        if (str_hex[i]>='0' && str_hex[i]<='9')tetrad=str_hex[i]-'0';
        else
        if (str_hex[i]>='A' && str_hex[i]<='F')tetrad=str_hex[i]-'A'+10;
        str_bin[i*4+0]=tetrad&0x08;
        str_bin[i*4+1]=tetrad&0x04;
        str_bin[i*4+2]=tetrad&0x02;
        str_bin[i*4+3]=tetrad&0x01;
        
    }
    str_bin[i*4] = '\0';
    return str_bin;
}
Cee K
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 46
29.04.2012, 21:08  [ТС]     Перевод из 16 в 2 #3
спасибо большое)
только я не очень понимаю, что такое strlen?

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
char* HexToBin(char* str_hex, char* str_bin)
{
    int i;
    char tetrad;
    for (i =0; i<strlen(str_hex); i++)
    {
        if (str_hex[i]>='0' && str_hex[i]<='9')tetrad=str_hex[i]-'0';
        else
        if (str_hex[i]>='A' && str_hex[i]<='F')tetrad=str_hex[i]-'A'+10;
        str_bin[i*4+0]=tetrad&0x08;
        str_bin[i*4+1]=tetrad&0x04;
        str_bin[i*4+2]=tetrad&0x02;
        str_bin[i*4+3]=tetrad&0x01;
        
    }
    str_bin[i*4] = '\0';
    return str_bin;
}
 
void main()
{ 
    
    float f = 12.345;
    char str_bin[32];
    char  str_hex[8];
    printf ("%08x\n", *((int*)&f));
    printf("\n%s",HexToBin(str_hex,str_bin));
    getch();
}
в итоге это все будет выглядеть примерно вот так, но программа не срабатывает
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
29.04.2012, 22:02     Перевод из 16 в 2 #4
Цитата Сообщение от Cee K Посмотреть сообщение
str_bin[i*4+0]=tetrad&0x08;
str_bin[i*4+1]=tetrad&0x04;
str_bin[i*4+2]=tetrad&0x02;
str_bin[i*4+3]=tetrad&0x01;
ну наверное потому как лучше так
C++
1
2
3
4
str_bin[i*4+0]=tetrad&0x08+'0';
str_bin[i*4+1]=tetrad&0x04+'0';
str_bin[i*4+2]=tetrad&0x02+'0';
str_bin[i*4+3]=tetrad&0x01+'0';
Добавлено через 1 минуту
Цитата Сообщение от Cee K Посмотреть сообщение
float f = 12.345;
Что ты пытался сделать, прочитав float как int???
Cee K
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 46
29.04.2012, 22:24  [ТС]     Перевод из 16 в 2 #5
программа вообще должна выводить внутреннее представление числа типа float
сначала перевожу в 16сс, а потом в 2сс

Добавлено через 11 минут
я не понимаю как мне полученное 16чное число засунуть в массив hex_str
Yandex
Объявления
29.04.2012, 22:24     Перевод из 16 в 2
Ответ Создать тему
Опции темы

Текущее время: 03:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru