Как я преобразовываю часть кортежа Python (массив байтов) в целое число

Я не уверен, почему ты хочешь сделать это. Следующее должно просто работать.

DB::table('product_details')
    ->where([
        'product_details.title' => $request->title
        'product_details.id' => $request->id
    ])
    ->get(); 

Теперь предположим, что у вас не всегда есть заголовок или идентификатор из запроса, вы также можете сделать это

DB::table('product_details')
    ->when($request->title, function ($query, $title) {
        return $query->where('product_details.title', $title);
    })
    ->when($request->id, function ($query, $id) {
        return $query->where('product_details.id', $id);
    })
    ->get();
7
задан Phil Hannent 22 December 2008 в 17:06
поделиться

5 ответов

Посмотрите преобразовывают байты в числа с плавающей точкой в Python

Вы, вероятно, хотите использовать модуль структуры, например.

import struct

response = (0, 0, 117, 143, 6)
struct.unpack(">I", ''.join([chr(x) for x in response[:-1]]))

Принятие неподписанного интервала. Может быть лучший способ сделать преобразование для распаковки, понимание списка с соединением было просто первой вещью, которую я придумал.

Править: См. также комментарий ΤΖΩΤΖΙΟΥ к этому ответу относительно порядка байтов также.

РЕДАКТИРОВАНИЕ № 2: Если Вы не возражаете использовать модуль массива также, вот альтернативный метод, который устраняет потребность в понимании списка. Благодаря @JimB для указания, которые распаковывают, может воздействовать на массивы также.

import struct
from array import array

response = (0, 0, 117, 143, 6)
bytes = array('B', response[:-1])
struct.unpack('>I', bytes)
11
ответ дан 6 December 2019 в 05:39
поделиться

Был бы,

num = (response[0] << 24) + (response[1] << 16) + (response[2] << 8) + response[3]

удовлетворить свои потребности?

помощь

13
ответ дан 6 December 2019 в 05:39
поделиться

Хорошо, Вы не указываете endinanness или подписывается ли целое число или и это (возможно), быстрее к с модулем структуры, но:

b = (8, 1, 0, 0)
sum(b[i] << (i * 8) for i in range(4))
4
ответ дан 6 December 2019 в 05:39
поделиться

Вы могли также использовать модуль массива

import struct
from array import array
response = (0, 0, 117, 143, 6)
a = array('B', response[:4])
struct.unpack('>I', a)

(30095L,)
4
ответ дан 6 December 2019 в 05:39
поделиться

Как насчет использования функции карты:

a = (0, 0, 117, 143, 6)
b = []
map(b.append, a)

Кроме того, я не знаю, ищете ли вы:

response = (0, 0, 117, 143, 6)
response[0:4]
0
ответ дан 6 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: