Anonymous
Есть 32 бита, в них, между двумя интерфейсами нааример i2c и сокеты, но не обязательно именно эти, будут передаваться от 6 до 9 переменных разной битной длинны, - какие-то просто флаги по биту, какие-то по 10-12 бит. В си это делается в одну строчку, - упаковка таких переменных в четыре байта, - сдвиг и склейка. Но питон походу ничего не знает ни про какие байты, для него byte и bytearray это просто такие особые str. :( И я не понимаю , как учитывая все .encode .decode упаковать эти переменные. :(
c
Есть 32 бита, в них, между двумя интерфейсами нааример i2c и сокеты, но не обязательно именно эти, будут передаваться от 6 до 9 переменных разной битной длинны, - какие-то просто флаги по биту, какие-то по 10-12 бит. В си это делается в одну строчку, - упаковка таких переменных в четыре байта, - сдвиг и склейка. Но питон походу ничего не знает ни про какие байты, для него byte и bytearray это просто такие особые str. :( И я не понимаю , как учитывая все .encode .decode упаковать эти переменные. :(
оу i2c
Anonymous
С парсингом после получения никаких проблемм. Так же никаких проблем с отправкой , но не на питоне конечно.
c
четыре байта это int?
c
или массив из четырех unsigned char?
Anonymous
Нет это не инт. Ну то есть это можно представить как инт конечно, но на самом деле в 4 байтах 6-8 отдельных int :)
👑OGURCHIK🖤
Есть 32 бита, в них, между двумя интерфейсами нааример i2c и сокеты, но не обязательно именно эти, будут передаваться от 6 до 9 переменных разной битной длинны, - какие-то просто флаги по биту, какие-то по 10-12 бит. В си это делается в одну строчку, - упаковка таких переменных в четыре байта, - сдвиг и склейка. Но питон походу ничего не знает ни про какие байты, для него byte и bytearray это просто такие особые str. :( И я не понимаю , как учитывая все .encode .decode упаковать эти переменные. :(
a = b'\x14\xf6'
a += a[0:1]
👑OGURCHIK🖤
Anonymous
Хекс блин. :( Надо завести в голове калькулятор hex <> bin. :) Ладно а как мне 6 переменных уложить в 32 бита? К примеру 1,1,0,0,9856,203. Остаток заполнить нулями?
Artyom
как ты будешь определять границы между переменными?
Anonymous
Ну то что на си делается - byte(1)<<7&byte(9856) они строго заданны.
c
на си нет byte
Artyom
Anonymous
То есть каждый из разрядов 32 бит, четко поделен на имеющиеся переменные
c
Artyom
c
как и unsigned char
c
Anonymous
Типа-старший левый 1 разряд, следуюшие четыре, следующие 10 , и далее
Anonymous
Да, но они могут не быть по два или четыре бита. Могут быть 7;1;1;1;10...
Anonymous
Единицы это передающиеся bool
Artyom
Artyom
в чем проблема?
🍁 Jaŭhien
Так ты просто делаешь сдвиг и and битовый
🍁 Jaŭhien
Anonymous
Ок, а в байтах можно? Или каждый раз в иет конвертить да еще и с .encode .decode?!
Julian 🏳️🌈
причем хер знает как в пайтоне представляется инт
Anonymous
В int
🍁 Jaŭhien
Bytes - это не инт
Julian 🏳️🌈
учитывая, что он вообще длинноарифметичный
🍁 Jaŭhien
Нельзя
c
Nikolay
Давно не имел дел с байтами и операциями над ними🌚
🍁 Jaŭhien
Ни в bytes, ни в bytearray
c
Anonymous
То есть приняли 32 байта делаем .decode, , парсим, присваиваем в инте , потом собираем все 6 переменных прям в инте, потом преобразуем в байты, и отправляем?
🍁 Jaŭhien
Битовые операции делаются с числами, с bytes они не работают
Artyom
from struct import pack, unpack
Artyom
второй вариант
Artyom
Artyom
во втором питоне точно, в третьем уже вроде все длинные
Artyom
типизацию можно юзать из numpy
Artyom
там есть типы (u)int*
Artyom
через пак, можно как хочешь соединять переменные, выдает байт строкой
c
Anonymous
Неработает.
Anonymous
a = (10<<4)|254
Anonymous
И только один байт
Artyom
Artyom
Artyom
надо на 8 минимум сдвинуть
Anonymous
Если сдвигать больге чем на 4 то он просто заполнит нулями весь сдвиг а не увеличит с байта до unit16
Artyom
Anonymous
А вот за наводку на pack огромное спасибо. Буду читать про эту функцию
c
Anonymous
a=(10<<5)
do not import flask
Какое же это байтоебство, не удержался, ну простите.
Artyom
что бы туда добавить 8битное число
Anonymous
Это не байтоебство! Это просто потребность писать на питоне под железо. :) Такова оссобенность малинки. :)
c
Anonymous
Это САМАЯ примитивная задача со склейкой байтов. Обычно все НАМНОГО сложнее и хуже. :)
Artyom
c
Artyom
и нет операции "склейки"
c
c
это не сложно
Anonymous
Нааример нужно отправлять все то же самое, но только прделить для передачи 1 3 и 7 переменной в одном пакете а остальные в следующем, и аот так чередовать через один пакет. Да еще crc пощитай добавь..
Anonymous
Это ОЧЕНЬ критичный участок
Julian 🏳️🌈
c
Anonymous
Настолько что любая оптимизация не окажеться лишней
Artyom
Julian 🏳️🌈
Ну вообще под малинку спокойно есть gcc
Anonymous
Или для передачи команд упрпавления на летящий девайс. :)