Страница 1 из 1

RFC7049

Добавлено: 03 ноя 2016, 22:22
olib35
Всем добрый день (вечер, утро)! Кто-нибудь уже пытался реализовать в LV кодирование-декодирование по протоколу RFC 7049 (CBOR)? Очень интересная шука. В него можно упаковать практически любой тип данных. А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.

Re: RFC7049

Добавлено: 03 ноя 2016, 22:46
Kosist
olib35 писал(а): А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.
А вот это непонятно - что Вы имеете в виду? В :labview: как раз в массиве нельзя иметь строки и цифровые значения...
А по поводу имплементации - может можно создать dll из С-шного кода? На С алгоритм реализован, http://cbor.io/impls.html, теоретически можно сделать обертку для :labview: .

Re: RFC7049

Добавлено: 03 ноя 2016, 23:00
olib35
В том-то и дело, что нельзя! А в CBOR это допустимо. В LV надо все типы приводить к одному. Я пока выбрал "variant", но я думаю надо перевести в текст, для лучшего отображения. Есть уже готовая dll на C#, но у меня начинала крыша дымить потихоньку, пока я разбирался с функциями

Re: RFC7049

Добавлено: 04 ноя 2016, 00:01
Kosist
olib35 писал(а):В том-то и дело, что нельзя! А в CBOR это допустимо. В LV надо все типы приводить к одному. Я пока выбрал "variant", но я думаю надо перевести в текст, для лучшего отображения. Есть уже готовая dll на C#, но у меня начинала крыша дымить потихоньку, пока я разбирался с функциями
"Мухи отдельно, котлеты отдельно" - Вы путаете две категории. :labview: - язык программирования, CBOR - формат данных. В большинстве (а может и во всех) языках программирования массив - группа данных одного типа. Другое дело - это структуры, кластеры, хеш-массивы. Но здесь это не тот случай...

Re: RFC7049

Добавлено: 04 ноя 2016, 09:27
olib35
Уважаемый Kosist, спасибо за Ваш интерес к теме. Я прошу прощения, что не внятно изъясняюсь, хотелось написать не много и уместить в написанном больше. По отношению к массивам хочу сказать, что у меня возникают трудности создание компактного кода при обработке массива кодированного в CBOR и переводе его под LV во что-то удобоваримое. Получается монстр. Вот dll на C#, может ткнете носом, последовательность функций для декодирования массива, а то я уже оставил все надежды на использование этой dll? dll взята с sourceforge, источники на Github от PeterO. https://github.com/peteroupc/CBOR

Re: RFC7049

Добавлено: 04 ноя 2016, 10:31
dadreamer
olib35, с чем конкретно у вас проблемы? По ссылке, что вы привели, есть примеры:
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);
Writing multiple objects to a file, including arbitrary objects:

Код: Выделить всё

// 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);
}
Там же и ссылка на доки по API: https://peteroupc.github.io/CBOR/docs/
Выложите свои наработки, если возможно.

Re: RFC7049

Добавлено: 04 ноя 2016, 13:25
olib35
Вот. Пока еще не все типы обработаны, сделал проброс в фреймах. Проблема у меня - если массив в массиве. Как можно это компактнее организовать. LabView 2014

Re: RFC7049

Добавлено: 04 ноя 2016, 13:38
olib35
Вот ссылка для симуляции кода http://cbor.me/?

Re: RFC7049

Добавлено: 04 ноя 2016, 13:55
Blackman
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

Что здесь такого?

Re: RFC7049

Добавлено: 04 ноя 2016, 15:16
dadreamer
olib35 писал(а):Вот. Пока еще не все типы обработаны, сделал проброс в фреймах. Проблема у меня - если массив в массиве. Как можно это компактнее организовать. LabView 2014
Я так понимаю, вы решили свои "велосипеды" реализовать. А библиотеку не будете пытаться подключить? По-моему, там ничего сложного. Вот первый пример (частично, мне просто лень все эти типы переводить, там всё по аналогии):
Untitled 1.vi
lv2012
(7.41 КБ) 177 скачиваний
Для "превращения" типов :labview: в типы System.Object использован :vi: , лежащий в 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?

Re: RFC7049

Добавлено: 04 ноя 2016, 15:28
olib35
Большое спасибо за помощь. У меня пробелы (провалы) в текстовых языках прогроммирования. :crazy:

Re: RFC7049

Добавлено: 04 ноя 2016, 15:35
dadreamer
olib35 писал(а):Большое спасибо за помощь. У меня пробелы (провалы) в текстовых языках прогроммирования. :crazy:
Ну, строки кода вы же можете прочитать. Если, конечно, с английским более-менее. :wink: Свойства и методы везде называются одинаково, это одно из важных свойств любых библиотек. Остаётся только перегонять в :labview: поблочно каждый оператор.