Другие языки программирования и технологии
Как получить двоичный код файла?
преподаватель дал такое задание: есть файл (аудио), нужно из него получить текстовый файл, содержащий ДВОИЧНЫЙ код аудиофайла, причем в одной строке одна цифра (но мне бы хотя бы просто получить). Многие советуют НЕХ редакторы, но там шестнадцатиричный код, а нужен именно двоичный. Помогите пожалуйста.
В winhex можно любой посмотреть
Игорь Морозов
а как это сделать? (что именно нажать?) или слишком долго объяснять? Если нет, объясните, пожалуйста)
Надо рассказать, как вывести байт в двоичном коде? Но тут даже синтаксис не указан
Первый вариант решения задачи.
В байте 8 бит. Считываете один беззнаковый байт (unsigned char) из входного потока, если аудио это двоичный поток.
1. Сперва сдвигаете операцией правого сдвига на 7. Получаете начальный двоичный символ.
2. Сдвигаете левым сдвигом на 1. Затем снова правым сдвигом на 7. Получаете второй символ
3. Сдвигаете левым сдвигом на 2. Затем снова правым сдвигом на 7. Получаете 3 символ
4. Сдвигаете левым сдвигом на 3. Затем снова правым сдвигом на 7. Получаете 4 символ
5. Сдвигаете левым сдвигом на 4. Затем снова правым сдвигом на 7. Получаете 5 символ
6. Сдвигаете левым сдвигом на 5. Затем снова правым сдвигом на 7. Получаете 6 символ
7. Сдвигаете левым сдвигом на 6. Затем снова правым сдвигом на 7. Получаете 7 символ
8. Сдвигаете левым сдвигом на 7. Затем снова правым сдвигом на 7. Получаете 8 символ
Второй вариант решения задачи. Используете двоичные маски (10000000, 01000000, 00100000, 00010000, 00001000, 00000100, 00000010, 00000001 в шестнадцатеричном виде) и операции И &.
Пример первого варианта
int main()
{
unsigned char x=254;
unsigned char a;
a = x>>7;printf("%d",a);
a = x<<1;a = a>>7;printf("%d",a);
a = x<<2;a = a>>7;printf("%d",a);
a = x<<3;a = a>>7;printf("%d",a);
a = x<<4;a = a>>7;printf("%d",a);
a = x<<5;a = a>>7;printf("%d",a);
a = x<<6;a = a>>7;printf("%d",a);
a = x<<7;a = a>>7;printf("%d\n",a);
fgetc(stdin);
}
Пример на второй вариант
int main()
{
unsigned char x=254;
unsigned char a;
a = x&128;a = a>>7;printf("%d\n",a);
a = x&64;a = a>>6;printf("%d\n",a);
a = x&32;a = a>>5;printf("%d\n",a);
a = x&16;a = a>>4;printf("%d\n",a);
a = x&8;a = a>>3;printf("%d\n",a);
a = x&4;a = a>>2;printf("%d\n",a);
a = x&2;a = a>>1;printf("%d\n",a);
a = x&1;printf("%d\n",a);
fgetc(stdin);
}
В байте 8 бит. Считываете один беззнаковый байт (unsigned char) из входного потока, если аудио это двоичный поток.
1. Сперва сдвигаете операцией правого сдвига на 7. Получаете начальный двоичный символ.
2. Сдвигаете левым сдвигом на 1. Затем снова правым сдвигом на 7. Получаете второй символ
3. Сдвигаете левым сдвигом на 2. Затем снова правым сдвигом на 7. Получаете 3 символ
4. Сдвигаете левым сдвигом на 3. Затем снова правым сдвигом на 7. Получаете 4 символ
5. Сдвигаете левым сдвигом на 4. Затем снова правым сдвигом на 7. Получаете 5 символ
6. Сдвигаете левым сдвигом на 5. Затем снова правым сдвигом на 7. Получаете 6 символ
7. Сдвигаете левым сдвигом на 6. Затем снова правым сдвигом на 7. Получаете 7 символ
8. Сдвигаете левым сдвигом на 7. Затем снова правым сдвигом на 7. Получаете 8 символ
Второй вариант решения задачи. Используете двоичные маски (10000000, 01000000, 00100000, 00010000, 00001000, 00000100, 00000010, 00000001 в шестнадцатеричном виде) и операции И &.
Пример первого варианта
int main()
{
unsigned char x=254;
unsigned char a;
a = x>>7;printf("%d",a);
a = x<<1;a = a>>7;printf("%d",a);
a = x<<2;a = a>>7;printf("%d",a);
a = x<<3;a = a>>7;printf("%d",a);
a = x<<4;a = a>>7;printf("%d",a);
a = x<<5;a = a>>7;printf("%d",a);
a = x<<6;a = a>>7;printf("%d",a);
a = x<<7;a = a>>7;printf("%d\n",a);
fgetc(stdin);
}
Пример на второй вариант
int main()
{
unsigned char x=254;
unsigned char a;
a = x&128;a = a>>7;printf("%d\n",a);
a = x&64;a = a>>6;printf("%d\n",a);
a = x&32;a = a>>5;printf("%d\n",a);
a = x&16;a = a>>4;printf("%d\n",a);
a = x&8;a = a>>3;printf("%d\n",a);
a = x&4;a = a>>2;printf("%d\n",a);
a = x&2;a = a>>1;printf("%d\n",a);
a = x&1;printf("%d\n",a);
fgetc(stdin);
}
***** *****
Уверен, что после Вашего решения за него его задачи, это туловище ещё обратиться к Вам, что пришлёт исходный файл Вам, и Вы сами за него сделаете ответный текстовый файл.
Дмитрий Гордиенко
Вы почему-то решили, что биты надо выводить начиная со старшего. Я бы выводил начиная с младшего: это упрощает алгоритм и более логично, на мой взгляд. Хотя ваш код тоже можно упросить.
for (int i = 8; --i >= 0; )
printf("%d\n", (x >> i) & 1);
for (int i = 8; --i >= 0; )
printf("%d\n", (x >> i) & 1);
Стерео аудиопоток продолжительностью 1 секунда с частотой дискретизации 44100гц и битрейтом 192bit будет иметь 2 * 1 * 44100 * 192 = 16934400 бит данных. Многовато будет.
Плюс все эти биты хранятся в аудиофайлах в сжатом состоянии, поэтому полученные биты из не будут являться исходным аудио, а лишь способом записи этого самого аудио на диск.
Плюс все эти биты хранятся в аудиофайлах в сжатом состоянии, поэтому полученные биты из не будут являться исходным аудио, а лишь способом записи этого самого аудио на диск.
***** *****
Ему и нужен текстовый дамп фала, а не аудиопотока в каком-то формате. Для этого перца задание невыполнимо. Я ему в прошлых вопросах уже написал что и где почитать, но он только хамил в ответ.
Видимо, хочет, чтобы мы тут все кинулись и ему задание за него сделали. А он потом, получив диплом и заняв должность, угробил нас, наших детей или родственников...
Он, даже, по-русски-то с трудом пишет... Какой ему, нахрен, университет?..
Видимо, хочет, чтобы мы тут все кинулись и ему задание за него сделали. А он потом, получив диплом и заняв должность, угробил нас, наших детей или родственников...
Он, даже, по-русски-то с трудом пишет... Какой ему, нахрен, университет?..
Такое задание проще всего выполнить простенькой программой. Но если Вы не умеете программировать, то Вам всё равно придётся много-много раз нажимать на клавишу <ВВОД>, даже если умудритесь получить двоичный текстовый дамп, чтобы каждая двоичная цифра оказалась на своей строке, поэтому Вам никакой редактор не поможет.
Лучшее, что Вы можете сделать — покинуть университет и не забивать свои мозги этой туфтой.
Идите в шаурмячники! Там заработок реальный и никаких двоичных кодов!!!
Лучшее, что Вы можете сделать — покинуть университет и не забивать свои мозги этой туфтой.
Идите в шаурмячники! Там заработок реальный и никаких двоичных кодов!!!
Игорь Морозов
а вы можете написать такую программу? не бесплатно, разумеется
Считываешь в переменную uint(byte char u'll ) и переводишь в двоичную сс
Похожие вопросы
- Сейчас ведь нет надобности в двоичном коде ?
- Разум в двоичный код.
- Объясните как происходит запись информации в двоичном коде. Специально распишу как я это понимаю, чтобы объяснитель
- Почему не сжать двоичный код?
- Добрый день. Компьютер все языки программирование понимает как двоичный код ( если я не ошибаюсь).
- нужен генератор двоичного кода (Pascal)
- двоичный код что это
- Двоичный код - перевод (надо думать)
- Перевод символа в двоичный код.
- Господа! Напишите (если такое конечно возможность) пример двоичного кода, который невозможно сжать (более 10 символов)