Рейтинг:
12
OriginalGriff
"Двоичный файл" не содержит только ноль и 1, он содержит двоичные данные - это значения без знака char, каждое из которых содержит от 0 до 255 включительно. Если ваши данные действительно являются двоичными значениями 0 и 1 только на байт, то все, что вам нужно сделать, это выполнить цикл сбора каждых восьми битов в беззнаковом Символе с помощью оператора <<, чтобы переместить каждый бит на место, а затем записать каждый собранный байт на ваш вывод, когда он будет закончен.
Но я бы начал с просмотра вашего двоичного файла с помощью шестнадцатеричного редактора, чтобы убедиться, что вы не просто путаете все приложение!
yagami_md
вы можете изменить мой код, чтобы он был похож на то, что вы говорите?
OriginalGriff
Да, мог бы , но это твоя работа, а не моя.
И это не совсем сложно. Я бы действительно начал с проверки ваших входных файлов...
Рейтинг:
10
Richard MacCutchan
Более простой способ состоял бы в том, чтобы читать восемь байтов за раз и собирать ascii из младших битов, что-то вроде:
char inputBuffer[8];
char temp;
FILE* binin;
int i;
binin = fopen("ctest.txt", "rb");
if (binin == NULL)
exit(1);
do
{
int nIn = fread(inputBuffer, sizeof(char), sizeof inputBuffer, binin);
if (nIn < sizeof inputBuffer)
break;
temp = 0;
for (i = 0; i < 8; ++i)
{
temp |= (inputBuffer[i] & 1) << (7 - i);
}
printf("%c", temp);
} while(1);
printf("\n");
yagami_md
моя программа на visual studio 2010, c langage
Richard MacCutchan
Я изменил код, чтобы использовать чистый Си; пожалуйста, попробуйте прямо сейчас.
yagami_md
большое вам спасибо , все хорошо
Спасибо, брат, ты хороший программист, спасибо за твою помощь
Richard MacCutchan
Рад помочь. Не очень хорошо, но я уже давно этим занимаюсь.