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

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

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2015, 01:20   #1
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию Помочь найти ошибку в коде.

Всем привет. Вот нашел на просторах сети данный код по преобразованию строки в байт и наоборот:

Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type
      TByteArr = array of byte;
    TStringArr = array of String;

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { private declarations }
    function StrToByte(const Value: String): Tbytearr;
    function ByteToString(const Value: TByteArr): String;
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }


function Form1.StrToByte(const Value: String): TByteArr;
var
        I: integer;
begin
         SetLength(Result, Length(Value));
         for I := 0 to Length(Value) - 1 do
         Result[I] := ord(Value[I + 1])-48;
end;


function Form1.ByteToString(const Value: TByteArr): String;
var
        I: integer;
        S : String;
        Letra: char;
begin
S := '';
for I := Length(Value)-1 Downto 0 do
begin
  letra := Chr(Value[I] + 48);
  S := letra + S;
end;     Result := S;

end;


procedure TForm1.Button1Click(Sender: TObject);
var
        ArByte : TByteArr;
        I : Integer;
begin
SetLength(ArByte, Memo1.Lines.Count);

for I := 0 to Memo1.Lines.Count - 1 do
ArByte[I] := StrToInt(Memo1.Lines.Strings[I]);
ShowMessage(ByteToString(ArByte));


end;

procedure TForm1.Button2Click(Sender: TObject);
Var   xByte: TByteArr;
        I: integer;
        begin
        Memo1.Clear;
        xByte := StrToByte(Edit1.Text);
        for I := 0 to Length(xByte) - 1 do
        Memo1.Lines.Add(IntToStr(xByte[I]));
end;

end.
Брал отсюда http://mrbool.com/string-to-byte-and...g-delphi/18196

Выдает такие ошибки компилятор:
Цитата:
Компиляция проекта, цель: project1.exe: Код завершения 1, ошибок: 2
unit1.pas(42,25) Error: class identifier expected
unit1.pas(52,28) Error: class identifier expected
В чем может быть проблема?

Последний раз редактировалось Stilet; 27.07.2015 в 07:56.
Максим_maks вне форума Ответить с цитированием
Старый 27.07.2015, 02:01   #2
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Измените это:
Код:
function Form1.StrToByte(const Value: String): TByteArr;
function Form1.ByteToString(const Value: TByteArr): String;
на это:
Код:
function TForm1.StrToByte(const Value: String): TByteArr;
function TForm1.ByteToString(const Value: TByteArr): String;
т.е. вместо Form1 написать TForm1.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 27.07.2015, 08:02   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
по преобразованию строки в байт
Попахивает Великим Орхиватором. ))
Тебе, если не секрет, зачем такая музыка? Строка она и так байтовый массив, даже если юникодная.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2015, 14:47   #4
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Тоже не знаю для чего это нужно, но а разве в Pascal'e можно как-то проще преобразовать с типа string в тип array of byte?
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 27.07.2015, 15:13   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а разве в Pascal'e можно как-то проще преобразовать с типа string в тип array of byte?
Вопрос не в том, можно или нет. Вопрос в том - зачем?
Вот этот ответ от ТС оч. хочется услышать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2015, 16:03   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Тоже не знаю для чего это нужно, но а разве в Pascal'e можно как-то проще преобразовать с типа string в тип array of byte?
Можно попробовать получить указатель и через move, но:
Цитата:
Вопрос в том - зачем?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.07.2015, 16:37   #7
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию

Всем спасибо, вечером попробую исправить. Рассказываю зачем мне это нужно. Мне нужно организовать передачу байтов в плату arduino через com порт. Использую компонент SDPO. Засылаю байты и слушаю порт сниффером. На входе 0x00, на выходе 30 78 30 30 , а мне нужны байты. Данные заведены в StringGrid в виде 0x00, 0x80 и т.д.
Максим_maks вне форума Ответить с цитированием
Старый 27.07.2015, 16:56   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Засылаю байты и слушаю порт сниффером.
Не нужно ничего перегонять. @s[1] - даст указатель на байтовый массив строки.
Цитата:
Данные заведены в StringGrid в виде 0x00, 0x80 и т.д.
Всмысле их еще и конвертировать из Сишной притулки нужно??
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2015, 00:23   #9
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию

А причем здесь сишные притулки???? 0x это формальность, 00 нужные данные.
Максим_maks вне форума Ответить с цитированием
Старый 28.07.2015, 00:26   #10
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
Измените это:
Код:
function Form1.StrToByte(const Value: String): TByteArr;
function Form1.ByteToString(const Value: TByteArr): String;
на это:
Код:
function TForm1.StrToByte(const Value: String): TByteArr;
function TForm1.ByteToString(const Value: TByteArr): String;
т.е. вместо Form1 написать TForm1.
Заменил, вот ошибки :
unit1.pas(26,20) Fatal: Syntax error, ":" expected but "." found

Код:
type
      TByteArr = array of byte;
    TStringArr = array of String;

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { private declarations }
    function TForm1.StrToByte(const Value: String): TByteArr;
    function TForm1.ByteToString(const Value: TByteArr): String;
  public
    { public declarations }
  end;
Максим_maks вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти ошибку в коде (Для данной целочисленной матрицы размером n*m найти матрицу из 0 и 1...) код на C camel5 Помощь студентам 1 26.11.2013 06:11
Pascal. Помочь найти ошибку в решение vokar97 Помощь студентам 1 01.02.2013 00:14
не могу найти ошибку! прошу помочь!:) Snake_k6 Общие вопросы C/C++ 2 02.11.2012 12:03
помочь наити ошибку в коде N-Ban Помощь студентам 10 20.12.2010 02:29
Просьба помочь исправить ошибку в форме обратной связи (HTML коде) Michelle77 Помощь студентам 1 20.10.2009 18:03