Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 26

Тема: Часть массива перевести в строку

  1. #1

    Question Часть массива перевести в строку

    Я новичок, кто может помогите.
    Получаю массив 10 ff 90 00 00 07 00 72 16 04 35 36 35 36 88 19, в котором часть 35 36 35 36 нужно преобразовать в строку. Должно получится 5656.

    Для преобразования прочитал, что удобнее использовать библиотеку oscat.lib
    Код:
    input:ARRAY [0..18] OF BYTE:= 16#10, 16#FF, 16#90, 16#00, 16#00, 16#07, 16#00, 16#72, 16#16, 16#04, 16#35, 16#36, 16#35, 16#36, 16#88, 16#19;
    out: STRING:= CHR_TO_STRING(input[11])+CHR_TO_STRING(input[12])+CHR_TO_STRING(input[13])+CHR_TO_STRING(input[14]);
    Такой вариант кода не дает компилировать.
    Подскажите пожалуйста как это делается правильно...

  2. #2
    Пользователь
    Регистрация
    30.11.2012
    Адрес
    40RUS
    Сообщений
    316

    По умолчанию

    Обьявите строку. И скопируйте нужное количество байтов в нее из входного массива с помощью функции SysMemCpy()
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  3. #3
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,254

    По умолчанию

    И нолик в конец не забываем

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Где описан тип CHR?
    а вместо многобукв и добавления доп.библиотеки можно так
    Код:
    foo : STRING;
    bar : POINTER TO STRING(4);
    
    #######
    bar := ADR(input[11]);
    foo:=bar^;
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #5
    Пользователь
    Регистрация
    30.11.2012
    Адрес
    40RUS
    Сообщений
    316

    По умолчанию

    capzap, а если adr будет нечетный не получим ли мы зависание при обращении к указателю?
    А если в буфере будет строка другой длины?
    Последний раз редактировалось _Pavel_; 05.03.2016 в 10:24.
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  6. #6

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Где описан тип CHR?
    а вместо многобукв и добавления доп.библиотеки можно так
    Код:
    foo : STRING;
    bar : POINTER TO STRING(4);
    
    #######
    bar := ADR(input[11]);
    foo:=bar^;
    Попробовал! Отлично работает! Спасибо за примерчик
    только немного подправил, т.к. немного результат был сдвинут...
    bar : POINTER TO STRING(3);
    bar := ADR(input[10]);

  7. #7
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Цитата Сообщение от _Pavel_ Посмотреть сообщение
    capzap, а если adr будет нечетный не получим ли мы зависание при обращении к указателю?
    А если в буфере будет строка другой длины?
    а может Вы изучите работу указателей и не будет у Вас этих если
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #8
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,254

    По умолчанию

    а если adr будет нечетный не получим ли мы зависание при обращении к указателю?
    тут соглашусь с capzap. Если в основе - байтовый тип (byte,bool,sint,usint,string,массивы из этого), то адрес не имеет значения. Даже внутри структуры или фб. Даже структуры* или фб* где внутри - тока эти типы или массивы их них.
    *То что при статическом размещении их адреса будут выровнены под 4 байта а размер неявно увеличен до кратного 4-ем, ничуть не меняет ранее сказанное
    А если в буфере будет строка другой длины?
    .. заранее неизвестная. Вот тут интересней. Поэтому я и напомнил про нолик с Вашего позволения

  9. #9
    Пользователь
    Регистрация
    30.11.2012
    Адрес
    40RUS
    Сообщений
    316

    По умолчанию

    Согласен по поводу первого обычный String он байтовый и все хорошо. Просто я подумал что ТС парсит сетевой пакет т.е. сейчас например ему нужно 5656 а потом придет 565656. Хотелость предложить более общее решение и надежное. Вдруг он захочет воспользоваться такой же технологией(указателем) и для других типов в будущем что приведет к известным последствиям.
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  10. #10
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Цитата Сообщение от _Pavel_ Посмотреть сообщение
    Согласен по поводу первого обычный String он байтовый и все хорошо. Просто я подумал что ТС парсит сетевой пакет т.е. сейчас например ему нужно 5656 а потом придет 565656. Хотелость предложить более общее решение и надежное. Вдруг он захочет воспользоваться такой же технологией(указателем) и для других типов в будущем что приведет к известным последствиям.
    советую пролистать библиотеку oscat, там массивы обрабатываются с помощью указателя на один байт, дополнительным входом используется количество единиц для обработки, в такой функции можете и спереди и сзади наставить кучу проверок, чтоб соответствовала Вашему представлению валидности
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. МСД-200, теряется часть архива.
    от alexsis_k в разделе Эксплуатация
    Ответов: 40
    Последнее сообщение: 24.02.2015, 14:07
  2. Во что перевести проводимость?
    от жекон в разделе Трёп (Курилка)
    Ответов: 6
    Последнее сообщение: 16.02.2015, 17:32
  3. CRC-16/ARC помогите перевести с С++ на мэк
    от Gvenihvivar в разделе ПЛК3хх
    Ответов: 16
    Последнее сообщение: 03.07.2014, 13:33
  4. MasterSCADA и средняя часть панели настройки
    от RoMatik в разделе Master SCADA 3
    Ответов: 8
    Последнее сообщение: 10.04.2008, 11:20

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •