2014-11-10 4 views
2

Я хотел бы сохранить каждый байт числа uint_32 к элементам матрицы 1x4 с использованием MatlabСохранение байт-мудрый uint_32 к массиву 1 по 4 в MATLAB

a = zeros(1,4,'uint8'); 
val = uint32(2^32-1); 

Как я могу разделить VAL байт -wise и вставить каждый отдельный элемент в массив?

+1

Обратите внимание, что 'uint32 (2^32)' равно нулю. – nneonneo

ответ

1

Из того, что я мог бы понял, я думаю, что вы ищете что-то подобное с наименее значащий байт происходит как крайний правый элемент в выходном векторе -

bits = reshape(bitget(num,32:-1:1),8,[]); %// num is the input number 
weights2 = 2.^([7:-1:0]); 
out = weights2*bits 
+0

Если вы попробуете 'bits = reshape (bitget (uint32 (1234), 32: -1: 1), 8, []);' matlab вернет: 'Ошибка при использовании * MTIMES не поддерживается полностью для целых классов. По меньшей мере один вход должен быть скалярным. Чтобы вычислить по-разному TIMES, используйте TIMES (. *) Вместо этого. 'Как решить – UserK

+1

@ narutov6 Это' num' должно быть в формате 'double'. Таким образом, вам необходимо преобразовать его в 'double', прежде чем использовать его. Таким образом, если у вас есть num = 'uint32 (1234)', сделайте это - 'bits = reshape (bitget (double (num), 32: -1: 1), 8, []);'. Надеюсь, это сработает и имеет смысл для вас! – Divakar

+0

Я использую значение ползунка как число. Я получаю следующую ошибку: 'Ошибка с использованием бита Двойные входы должны иметь целочисленные значения в диапазоне ASSUMEDTYPE. bits = reshape (bitget (double (get (pidKpSlider, 'Value') * 1000), 32: -1: 1), 8, []); ' – UserK

2

Вы можете использовать функцию typecast, преобразующего между типами данных без изменения базовых данных:

a = typecast(uint32(2^32-1), 'uint8') 
% produces the array [255 255 255 255] 
+0

Как насчет числа с плавающей запятой? скажем, val = 1,23. Что я должен указать в опции типа номера? – UserK

 Смежные вопросы

  • Нет связанных вопросов^_^