Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2016, 14:29   #1
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
Восклицание помогите написать Конвертер.

Уважаемые форумчане, прошу у вас помощи. Програмирую AVR задача в ледующем, В памяти eeprom хранятся данные в бинарном формате я их читаю с памяти прогоняя через код
Код:
void tx(unsigned char byt) {

unsigned char b=0;
int a;

for(a=7; a!=-1; a--){
    b=byt>>a;
    b=b & 1 ;
    
if(b==1) {putchar('1');}
if(b==0)  {putchar('0');}
 }
}
мне нужно эти 8 байт собрать в 1 бит

то есть мне нужен обратный конвертер. Нашёл такой код
Код:
type
  Bit = 0..1;
 
type
  TBitSet = array[0..7] of Bit;
 
function GetNBit (X, N: byte): Bit;
begin
  Result := x shr N and 1;
end;
 
function GetBits (X: byte): TBitSet;
 
var
  N: integer;
begin
  for N := 0 to 7 do
    Result[N] := GetNBit(X, N);
end;
 
function MakeByte (BitSet: TBitSet): byte;
 
var
  i: integer;
begin
  Result := 0;
  for i := 7 downto 0 do
    Result := Result shl 1 + (BitSet[i] and 1);
end;
думаю то что нужно, но не обладаю достаточными навыками и не имею компилятора, прошу тех кто не очень занят помочь мне дописать конвертер с выбором файла *.тхт и сохранении уже преобразованного. Спасибо большое за рание тем кто откликнуца на мою просьбу.

Последний раз редактировалось sarsen; 04.08.2016 в 14:31.
sarsen вне форума Ответить с цитированием
Старый 04.08.2016, 15:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

во-первых, пример txt файла есть?
во-вторых, почему выбрали Паскаль? И под какой компилятор Паскаля собираетесь писать/использовать программный код?

Цитата:
мне нужно эти 8 байт собрать в 1 бит
опечатка? "8 символов 1 и 0 нужно собрать в 1 байт" ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.08.2016, 17:06   #3
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
Восклицание

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, пример txt файла есть?
во-вторых, почему выбрали Паскаль? И под какой компилятор Паскаля собираетесь писать/использовать программный код?


опечатка? "8 символов 1 и 0 нужно собрать в 1 байт" ?
Ну да в 1 байт .

почему паскаль даже не знаю, много только о нём и слышал. А компилятора у меня нет поэтому и прошу чтобы вы честной народ мне помог и установить не могу у меня компьютер память не потдерживает нету у него винта, на флехе работает

Там в начале запись идёт $T1: это если конвертнуть (это чтобы легче вычислить было что искать).
Вложения
Тип файла: txt test.txt (1,010 байт, 126 просмотров)

Последний раз редактировалось sarsen; 04.08.2016 в 17:41.
sarsen вне форума Ответить с цитированием
Старый 04.08.2016, 23:23   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

набросал на коленке простейший код (см. ниже)

получилась какая-то фигня:
result_.png



код программы вот:
Код:
program ConvertHexToByte;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function BinaryToByte(const s : string):byte;
var i:integer;
begin
   result := 0;
   for i:=1 to 8 do begin
     result := result * 2;
     if s[i]='1' then Inc(result);
   end;
end;

var s : string[8];
  b : byte;
  f1, f2 : File of byte;
  countRead : integer;
begin
  AssignFile(f1, 'd:\test.txt');
  Reset(f1);
  AssignFile(f2, 'd:\result_.dat');
  Rewrite(f2);
  SetLength(s,8);
  while not eof(f1) do begin
    BlockRead(f1, s[1], 8, countRead);
    if countRead=8 then  begin
       b := BinaryToByte(s);
       BlockWrite(f2, b, 1);
    end;
  end;
  CloseFile(f1);
  CloseFile(f2);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.08.2016, 04:09   #5
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
набросал на коленке простейший код (см. ниже)

получилась какая-то фигня:
Вложение 82985



код программы вот:
Код:
program ConvertHexToByte;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function BinaryToByte(const s : string):byte;
var i:integer;
begin
   result := 0;
   for i:=1 to 8 do begin
     result := result * 2;
     if s[i]='1' then Inc(result);
   end;
end;

var s : string[8];
  b : byte;
  f1, f2 : File of byte;
  countRead : integer;
begin
  AssignFile(f1, 'd:\test.txt');
  Reset(f1);
  AssignFile(f2, 'd:\result_.dat');
  Rewrite(f2);
  SetLength(s,8);
  while not eof(f1) do begin
    BlockRead(f1, s[1], 8, countRead);
    if countRead=8 then  begin
       b := BinaryToByte(s);
       BlockWrite(f2, b, 1);
    end;
  end;
  CloseFile(f1);
  CloseFile(f2);
end.
спасибо вам большое это то что мне нужно!
sarsen вне форума Ответить с цитированием
Старый 05.08.2016, 05:59   #6
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

Ещё раз обращусь к вашей помощи. Имеется ключ шифрования XOR (1qaz2wsx3e) из 10 символов, шифруется он проходя через код
Код:
char crypt(char data){
   static char i;
   char result = data ^ Key[i++];
   if(i >= SIZE_OF_KEY) i = 0;
   return result;
}
записывая в память чипа
Код:
i2c_write(crypt(c1));
вот считанный файл с памяти в бинарном формате зашифрованный ключём только тут запись уже идёт не по 8 символов а 1 м байтом тоесть как вы собрали файл в 1 байт, здесь он просто закодирован 10 значным ключём хор
(1qaz2wsx3e) помогите написать, как вы выразились на коленке конвертер с вводом ключа, на выходе должно получится на выходе то, что и в предыдущем уравнении было ключ я могу задавать любой на этом файле именно тот что я написал.
Вложения
Тип файла: txt test.txt (162 байт, 125 просмотров)

Последний раз редактировалось sarsen; 05.08.2016 в 07:14.
sarsen вне форума Ответить с цитированием
Старый 05.08.2016, 07:47   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

xor двухсторонний, берите байты из этого файла и ксорьте
p51x на форуме Ответить с цитированием
Старый 05.08.2016, 08:21   #8
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
xor двухсторонний, берите байты из этого файла и ксорьте
Поэтому и прошу помочь, я не знаю этого языка учить некогда но обязательно выучу!
sarsen вне форума Ответить с цитированием
Старый 05.08.2016, 09:10   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А зачем вы взяли язык, который не знаете? Или просто дотянули пока пригорело?

Возьмите калькулятор - он умеет ксорить.

П.С. Так для интереса попробуйте ваш текстовик прогнать через вашу функцию crypt
p51x на форуме Ответить с цитированием
Старый 05.08.2016, 09:43   #10
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А зачем вы взяли язык, который не знаете? Или просто дотянули пока пригорело?

Возьмите калькулятор - он умеет ксорить.

П.С. Так для интереса попробуйте ваш текстовик прогнать через вашу функцию crypt
Вот именно пригорело, поэтому и прошу, ай нид хелп
sarsen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно написать конвертер Nemesis4ever Помощь студентам 0 16.01.2011 15:22
Помогите написать конвертер cpp->html Vano-sie72 Помощь студентам 1 18.05.2009 22:15
Помогите написать конвертер cpp->html Vano-sie72 Фриланс 1 18.05.2009 15:57
задача под windows,помогите написать.Надо написать на Borland C++Builder 6. eddddii Помощь студентам 9 23.05.2008 17:04