RFC7049
-
- beginner
- Сообщения: 17
- Зарегистрирован: 07 май 2013, 23:27
- Версия LabVIEW: 2015
- Откуда: Bielefeld
- Контактная информация:
RFC7049
Всем добрый день (вечер, утро)! Кто-нибудь уже пытался реализовать в LV кодирование-декодирование по протоколу RFC 7049 (CBOR)? Очень интересная шука. В него можно упаковать практически любой тип данных. А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: RFC7049
А вот это непонятно - что Вы имеете в виду? В как раз в массиве нельзя иметь строки и цифровые значения...olib35 писал(а): А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.
А по поводу имплементации - может можно создать dll из С-шного кода? На С алгоритм реализован, http://cbor.io/impls.html, теоретически можно сделать обертку для .
Мы делили апельсин - много наших полегло...
-
- beginner
- Сообщения: 17
- Зарегистрирован: 07 май 2013, 23:27
- Версия LabVIEW: 2015
- Откуда: Bielefeld
- Контактная информация:
Re: RFC7049
В том-то и дело, что нельзя! А в CBOR это допустимо. В LV надо все типы приводить к одному. Я пока выбрал "variant", но я думаю надо перевести в текст, для лучшего отображения. Есть уже готовая dll на C#, но у меня начинала крыша дымить потихоньку, пока я разбирался с функциями
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: RFC7049
"Мухи отдельно, котлеты отдельно" - Вы путаете две категории. - язык программирования, CBOR - формат данных. В большинстве (а может и во всех) языках программирования массив - группа данных одного типа. Другое дело - это структуры, кластеры, хеш-массивы. Но здесь это не тот случай...olib35 писал(а):В том-то и дело, что нельзя! А в CBOR это допустимо. В LV надо все типы приводить к одному. Я пока выбрал "variant", но я думаю надо перевести в текст, для лучшего отображения. Есть уже готовая dll на C#, но у меня начинала крыша дымить потихоньку, пока я разбирался с функциями
Мы делили апельсин - много наших полегло...
-
- beginner
- Сообщения: 17
- Зарегистрирован: 07 май 2013, 23:27
- Версия LabVIEW: 2015
- Откуда: Bielefeld
- Контактная информация:
Re: RFC7049
Уважаемый Kosist, спасибо за Ваш интерес к теме. Я прошу прощения, что не внятно изъясняюсь, хотелось написать не много и уместить в написанном больше. По отношению к массивам хочу сказать, что у меня возникают трудности создание компактного кода при обработке массива кодированного в CBOR и переводе его под LV во что-то удобоваримое. Получается монстр. Вот dll на C#, может ткнете носом, последовательность функций для декодирования массива, а то я уже оставил все надежды на использование этой dll? dll взята с sourceforge, источники на Github от PeterO. https://github.com/peteroupc/CBOR
- Вложения
-
[Расширение dll было запрещено, вложение больше недоступно.]
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: RFC7049
olib35, с чем конкретно у вас проблемы? По ссылке, что вы привели, есть примеры:
Creating a map and converting that map to CBOR bytes and a JSON string:
Writing multiple objects to a file, including arbitrary objects:
Там же и ссылка на доки по API: https://peteroupc.github.io/CBOR/docs/
Выложите свои наработки, если возможно.
Creating a map and converting that map to CBOR bytes and a JSON string:
Код: Выделить всё
// The following creates a CBOR map and adds
// several kinds of objects to it
var cbor = CBORObject.NewMap()
.Add("item", "any string")
.Add("number", 42)
.Add("map", CBORObject.NewMap().Add("number", 42))
.Add("array", CBORObject.NewArray().Add(999f).Add("xyz"))
.Add("bytes", new byte[] { 0, 1, 2 });
// The following converts the map to CBOR
byte[] bytes = cbor.EncodeToBytes();
// The following converts the map to JSON
string json = cbor.ToJSONString();
Console.WriteLine(json);
Код: Выделить всё
// C#
// This example writes different kinds of objects in CBOR
// format to the same file.
using (var stream = new FileStream("object.cbor", FileMode.Create)) {
CBORObject.Write(true, stream);
CBORObject.Write(422.5, stream);
CBORObject.Write("some string", stream);
CBORObject.Write(CBORObject.Undefined, stream);
CBORObject.NewArray().Add(42).WriteTo(stream);
}
Выложите свои наработки, если возможно.
-
- beginner
- Сообщения: 17
- Зарегистрирован: 07 май 2013, 23:27
- Версия LabVIEW: 2015
- Откуда: Bielefeld
- Контактная информация:
Re: RFC7049
Вот. Пока еще не все типы обработаны, сделал проброс в фреймах. Проблема у меня - если массив в массиве. Как можно это компактнее организовать. LabView 2014
- Вложения
-
- CBOR_temp.zip
- (55.82 КБ) 165 скачиваний
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: RFC7049
Notation [1, [2, 3]]
Bytes in hex: 82 01 82 02 03
82 - массив из 2 элементов
Элемент 1: 01 - целое положительное число U8
Элемент 2: 82 - массив из 2 элементов
Элемент 21: 02 - целое положительное число U8
Элемент 22: 03 - целое положительное число U8
Что здесь такого?
Bytes in hex: 82 01 82 02 03
82 - массив из 2 элементов
Элемент 1: 01 - целое положительное число U8
Элемент 2: 82 - массив из 2 элементов
Элемент 21: 02 - целое положительное число U8
Элемент 22: 03 - целое положительное число U8
Что здесь такого?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: RFC7049
Я так понимаю, вы решили свои "велосипеды" реализовать. А библиотеку не будете пытаться подключить? По-моему, там ничего сложного. Вот первый пример (частично, мне просто лень все эти типы переводить, там всё по аналогии): Для "превращения" типов в типы System.Object использован , лежащий в C:\Program Files (x86)\National Instruments\LabVIEW 2016\vi.lib\Platform\dotnet.llb\To .NET Object.vi. Есть и другой вариант, см. How Can I Transform a LabVIEW Object Into a .NET Object in LabVIEW?olib35 писал(а):Вот. Пока еще не все типы обработаны, сделал проброс в фреймах. Проблема у меня - если массив в массиве. Как можно это компактнее организовать. LabView 2014
-
- beginner
- Сообщения: 17
- Зарегистрирован: 07 май 2013, 23:27
- Версия LabVIEW: 2015
- Откуда: Bielefeld
- Контактная информация:
Re: RFC7049
Большое спасибо за помощь. У меня пробелы (провалы) в текстовых языках прогроммирования.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: RFC7049
Ну, строки кода вы же можете прочитать. Если, конечно, с английским более-менее. Свойства и методы везде называются одинаково, это одно из важных свойств любых библиотек. Остаётся только перегонять в поблочно каждый оператор.olib35 писал(а):Большое спасибо за помощь. У меня пробелы (провалы) в текстовых языках прогроммирования.