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