Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Запись битов в последние 4 байта файла.


Автор: olegrolik 25.1.2006, 19:41
Задание: Суммировать в каждых четырёх байтах файла (кроме первых четырёх и последних четырёх) с 15 по 29 биты. Полученную сумму записать в последние 4 байта.
Вот проблема в том, что не знаю как записать эти 4 байта в последние 4...

Буду рад, если кто поможет...

Вобщем программа такая:
#include "include.h"

void main()
{
const int MASK=0xC0003FFF;
int fd;
unsigned long slovo,sum=0,CHKS;
fd=open("s.txt",O_RDONLY);

read(fd,&slovo,sizeof(slovo)); /* Чтение файла с учетом первого слова */


while(read(fd,&slovo,sizeof(slovo))>0)

{
/* Очистка битов:31,30,14-0) */
slovo &= ~MASK;

/* Суммирование */
sum+= slovo;
CHKS=slovo; /* Последнее слово */
printf("%X\n",slovo);
}


close(fd);
sum-=CHKS;
printf("\nСумма без первого и последнего слова:%08X\n",sum &= ~MASK); // Маскируем, чтобы избавиться от лишних битов, если они накопились
}

Автор: Romikgy 26.1.2006, 10:35
1. Имхо
Цитата(olegrolik @ 25.1.2006, 18:41 Найти цитируемый пост)

const int MASK=0xC0003FFF
это не соответсвует этому
Цитата(olegrolik @ 25.1.2006, 18:41 Найти цитируемый пост)

15 по 29 биты

2.

Код

#include "include.h"
#include <stdio.h>
void main(){
const int MASK=0xC0003FFF;
int fd;
unsigned long slovo,sum=0,CHKS;
fd=open("s.txt",O_RDWR);
read(fd,&slovo,sizeof(slovo)); /* Чтение файла с учетом первого слова */

while(read(fd,&slovo,sizeof(slovo))>0)
{ /* Очистка битов:31,30,14-0) */
slovo &= ~MASK;
/* Суммирование */
sum+= slovo;
CHKS=slovo;
 /* Последнее слово */
printf("%X\n",slovo);
}
sum-=CHKS;

lseek(fd,4,SEEK_END);
write(fd,&sum,sizeof(sum));
close(fd);
printf("\nСумма без первого и последнего слова:%08X\n",sum &= ~MASK); 
// Маскируем, чтобы избавиться от лишних битов, если они накопились
}

Автор: olegrolik 27.1.2006, 00:27
Спасибо! Сегодня также написал, только в lseek(fd,4,SEEK_END); кажется вместо 4 писал -4L или типа того.
Насчёт несоответствия. Как не соотвествует? Эта маска нужна чтобы обнулить с 31,30 и с 14 по 0 биты.
Ну вобщем свои заморочки, запись произошла, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)