Читання і запис цілих чисел

При читанні і запису цілих чисел, що займають кілька байтів, потрібно дотримуватися певний порядок Щоб забезпечити переносимість, вам слід за один прийом завжди зчитувати один байт і ретельно компонувати багатобайтові цілі числа

Метод ReadIntMsb дозволяє вважати ціле число, починаючи зі старшого розряду Такий формат запису відомий під назвами тупокінцевий (Big-endian), мережний або формат фірми Motorola B противагу цьому метод ReadIntLsb зчитує ціле число, починаючи з молодшого розряду Цей формат запису називаєтьсязагостреним(Little-endian), форматом VAX або форматом Intel Методи BytesToIntxxx використовують покажчики замість обєктів типу istream

Лістинг 45 Оголошення допоміжних елементів класу AudioAbstract (продовження)

long ReadIntMsb(istream &ampin, int bytes) long BytesToIntMsb(void *buff, int bytes) long ReadIntLsb(istream &ampin, int bytes) long BytesToIntLsb(void *buff, int bytes) void SkipBytes(istream &ampin, int bytes)

Лістинг 411 Визначення допоміжних елементів клacca

AudioAbstract

long ReadIntMsb(istream &ampin, int size) {

if (size &lt = 0) return 0

long l = ReadIntMsb(in,size-1) &lt&lt 8

l |= static_cast&ltlong&gt(inget()) &amp 255

return l

}

long BytesToIntMsb(void *vBuff, int size) {

unsigned char *buff = reinterpret_cast&ltunsigned char

*&gt(vBuff)

if (size &lt= 0) return 0

long l = BytesToIntMsb(buff,size-1) &lt&lt 8

l |= static_cast&ltlong&gt(buff[size-1]) &amp 255

return l

}

long ReadIntLsb(istream &ampin, int size) {

if (size &lt= 0) return 0

long l = static_cast&ltlong&gt(inget()) &amp 255

l |= ReadIntLsb(in,size-1)&lt&lt8

return l

}

long BytesToIntLsb(void *vBuff, int size) {

unsigned char *buff = reinterpret_cast&ltunsigned char

*&gt(vBuff)

if (size &lt= 0) return 0

long 1 = static_cast&ltlong&gt(*buff) &amp 255 l |= BytesToIntLsb(buff+1,size-1)&lt&lt8 return l

}

void SkipBytes(istream &ampin, int size) {

while (size-&gt 0)

inget()

}

Запис цілих чисел, що складаються з декількох байтів, вимагає аналогічної акуратності

Лістинг 45 Оголошення допоміжних елементів класу AudioAbstract (продовження)

void WriteIntMsb(ostream &ampout, long l, int bytes)

void WriteIntLsb(ostream &ampout, long l, int bytes)

Лістинг 411 Визначення допоміжних елементів класу AudioAbstract

void WriteIntMsb(ostream &ampout, long l, int size) {

if (size &lt= 0) return

WriteIntMsb (out, l >> 8, size-1) / / Пишемо старші байти

output (l & 255) / / Пишемо молодший байт

}

void WriteIntLsb(ostream &ampout, long l, int size) {

if (size &lt= 0) return

output (l & 255) / / Пишемо молодший байт

WriteIntLsb (out, l >> 8, size-1) / / Пишемо все інше

}

Джерело: Кінтцель Т Керівництво програміста по роботі зі звуком = A Programmers Guide to Sound: Пер з англ М: ДМК Пресс, 2000 432 с, іл (Серія «Для програмістів»)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*