2017-12-06 1 views
0

Ich habe einen Vektor von int16-Werten, der in Matlab als ein Vektor von Zeichen dargestellt wird. (Grund dafür am Ende)Matlab Char-Array in einen anderen Datentyp konvertieren, ohne die Binärdaten zu ändern

Jetzt möchte ich nur alle zwei Char Werte aus dem Array zu einem einzigen int16 Wert konvertieren. Beim Lesen von Binärdateien kann dies durch den Parameter precision von fread() erreicht werden - gibt es eine analoge Funktion für Daten, die bereits in einem Vektor gespeichert sind?

Meine aktuelle Problemumgehung:

% workaround using fread() to convert data type char -> int16 
bytes = length(binary); 
f = fopen('tmp', 'w+'); 
fwrite(f, binary); 
fseek(f, 0, 'bof'); 
binary = fread(f, bytes/2, '*int16'); 

Grund, dass die Daten als Zeichen Vektor gelesen wird: Ich habe eine Datei zu lesen, die binäre enthält, die zwischen einigen ASCII-Strings abgekapselt ist. Um die Binärdaten zu finden, müssen die Strings interpretiert werden, für die ich regexp verwende. Dann bekomme ich den reinen Binärteil (int16 Werte in einer Zeile) als (char) String.

Antwort

1

Guss die Zeichen auf 8-Bit-Zahlen (ganze Zahlen), typisieren dann diejenigen zu 16-Bit-Integer:

s = 'abcd' 
b = cast(s, 'int8')  % Gives [97 98 99 100] 
i = typecast(b, 'int16') % Gives [25185 25699] 

Hinweis Sie unsigned ints verwenden möchten (uint16), je nach Anwendungsfall.

Verwandte Themen