Страница 1 из 1
RFC7049
Добавлено: 03 ноя 2016, 22:22
olib35
Всем добрый день (вечер, утро)! Кто-нибудь уже пытался реализовать в LV кодирование-декодирование по протоколу RFC 7049 (CBOR)? Очень интересная шука. В него можно упаковать практически любой тип данных. А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.
Re: RFC7049
Добавлено: 03 ноя 2016, 22:46
Kosist
olib35 писал(а): А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.
А вот это непонятно - что Вы имеете в виду? В
как раз в массиве нельзя иметь строки и цифровые значения...
А по поводу имплементации - может можно создать dll из С-шного кода? На С алгоритм реализован,
http://cbor.io/impls.html, теоретически можно сделать обертку для
.
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#, но у меня начинала крыша дымить потихоньку, пока я разбирался с функциями
"Мухи отдельно, котлеты отдельно" - Вы путаете две категории.
- язык программирования, 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
Я так понимаю, вы решили свои "велосипеды" реализовать. А библиотеку не будете пытаться подключить? По-моему, там ничего сложного. Вот первый пример (частично, мне просто лень все эти типы переводить, там всё по аналогии):
Для "превращения" типов
в типы 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?
Re: RFC7049
Добавлено: 04 ноя 2016, 15:28
olib35
Большое спасибо за помощь. У меня пробелы (провалы) в текстовых языках прогроммирования.
Re: RFC7049
Добавлено: 04 ноя 2016, 15:35
dadreamer
olib35 писал(а):Большое спасибо за помощь. У меня пробелы (провалы) в текстовых языках прогроммирования.
Ну, строки кода вы же можете прочитать. Если, конечно, с английским более-менее.
Свойства и методы везде называются одинаково, это одно из важных свойств любых библиотек. Остаётся только перегонять в
поблочно каждый оператор.