Forum: PC-Programmierung matlab 32Bit Variable in 4x 8Bit aufteilen


von Luky S. (luky)


Lesenswert?

Also die Überschrift beschreibt mein Problem eigentlich schon recht 
gut...
Ich habe einen 32Bit Wert (int) und muss den in Bytes aufteilen. Wie 
geht das mit Matlab am Besten? Bitoperationen etc. scheinen ja nicht 
dessen Stärke zu sein :-(

von heinz (Gast)


Lesenswert?

Hi,

sollte eigentlich mit bitand(a,b) und bitshift(a,k,n) zu machen sein.

gruß
Heinz

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

1
byte0 = x & 255
2
byte1 = (x & (255 * 2^8)) / 2^8
3
byte2 = (x & (255 * 2^16)) / 2^16 
4
byte3 = (x & (255 * 2^24)) / 2^24

von heinz (Gast)


Lesenswert?

x=2^(32)-1;

b3 = bitshift(x,-24,32)
b2 = bitand(bitshift(x,-16,32),255)
b1 = bitand(bitshift(x,-8,32),255)
b0 = bitand(x,255)

von Luky S. (luky)


Lesenswert?

Danke Heinz, funktioniert wunderbar!

von Luky S. (luky)


Lesenswert?

Kennt jemand eine elegante Methode um im Zweierkomplement gespeicherte 
Messwerte für Matlab aufzuarbeiten?

von heinz (Gast)


Lesenswert?

Theoretisch müsste man die erste Stelle (MSB) auswerten ob posit. oder 
negativ und dann die ganze zahl minus 1 und dann negieren. Dann das 
Ausgewertete vorzeichen Multiplizieren

für eine 8 Bit Zahl könnte das z.B. so sein (nicht getestet):

if (bitshift(x,-7,8) = 1)
 wert = -1 * (bitxor(x-1,255));
else
 wert =  (bitxor(x-1,255));
end

gruß Heinz

von heinz (Gast)


Lesenswert?

sorry, so ists besser:

if (bitshift(x,-7,8) = 1)
 wert = -1 * (bitxor(x-1,255));
else
 wert = x;
end

von Luky S. (luky)


Lesenswert?

if (wert > 32768) %1. Bit gesetzt, also negativ!
   real = - (65535 - (real-1));
end

funktioniert zwar für einen 16Bit Wert, elegant ist es aber nicht..

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.