Программирование - вопрос/ответ



         

Программирование - часть 13



а потом сами отсчеты, если каналов 2, то отсчет 1 канала, потом 2го, 1го…
если битов/отсчет меньше чем в байте/слове то дополняется нулями в младших битах и все равно занимает байт или слово.

Писал я это все так (для 8-битовых отсчетов):

DataLen= число отсчетов в байтах
if( DataLen % 2 ) PadFlg=1;
else PadFlg=0;
Riff.Len=sizeof(Wave)+sizeof(Data)+DataLen+PadFlg;
Wave.SamplesPerSecond=частота квантования в Гц
Wave.AvgBytesPerSecond=то же самое
Data.Len=DataLen+PadFlg;
fwrite(&Riff,1,sizeof(Riff),fo);
fwrite(&Wave,1,sizeof(Wave),fo);
fwrite(&Data,1,sizeof(Data),fo);
{
unsigned c;
for(long i=0; i<DataLen; i++)
{
c=getc(fi);
putc(c,fo);
}
if( PadFlg ) putc(c,fo);
}

Из конференции Expert_FAQ

Дополнить этот ответ | Задать свой вопрос

Вопрос

Какой алгоритм перевода чисел из десятичной системы в двоичную и обратно? Восьми/ шестнадцатеричную? В двух словах, если не трудно.

Ответ

Для перевода чисел из десятичной системы исчисления в какую-либо другую используется метод деления. Допустим, у вас имеется число 173 и его необходимо перевести в двоичную систему. В данном случае модуль системы исчисления (количество цифр в обном десятке) равен 2 (для 16-ричной модуль равен 16, 8-ричной — 8). Делается это так: 173 | 1 — делим 173 на 2, получаем: 173/2 = 86, остаток 1
86 | 0 — делим 86 на 2, получаем 86/2= 43, остаток 0
 43 | 1 — 43/2 = 21, остаток — 1
 21 | 1 — 21/2 = 10, остаток — 1
 10 | 0 — 10/2 = 5, остаток — 0
  5 | 1 — 5/2 = 2, остаток — 1
  2 | 0 — 2/2 = 1, остаток — 0
  1 | 1 — на этом вычисления заканчиваются.
Число читаем снизу вверх: 10101101

Еще для примера — представим число 2473 в 16-ричной системе исчисления:
2475 | 11(В)- 2475/16 = 154, остаток — 11
 154 | 10(А)- 154/16 = 9, остаток — 10
  9 | 9 — на этом вычисления заканчиваются.
Число читаем снизу вверх: 9АВ

В 16-ричной системе для обозначения цифр больше 9 используются первые буквы латинского алфавита: 10 16
****** 0 0
1 1
2 2
. .
. .



Содержание  Назад  Вперед