.. highlightlang:: us .. index:: mem_get .. _mem_get: mem_get ======= .. us.tag mem_get GERMAN mem New420 Changed500 Changed582 Changed5404 :ref:`mem_get` ließt Bytes aus einem String und führt eine Datentyp-Konvertierung durch. .. function:: rvValues = mem_get(ssString, pos, ssType, count) rvValues = mem_get(ssString, pos, ssType, count, nRecLen) rvValues = mem_get(ssString, pos, ssType, count, rvOptions) ssSubString = mem_get(ssString, pos, count) .. us.return **Returnwert** *rvValues* ist ein Vektor von *count* Zahlenwerten oder ein String, wenn die Funktion in der Form ``ssSubString = mem_get(ssString, pos, count)`` aufgerufen wurde. .. us.params **Parameter** .. uparam:: ssString *ssString* ist ein skalarer String. .. uparam:: pos *pos* ist eine Zahl zwischen 1 und ``mem_len(ssString)``. Sie gibt den Offset im String an, ab dem gelesen werden soll. .. uparam:: ssType Der Datentyp der gelesen werden soll: .. list-table:: :header-rows: 1 * - Typ - Beschreibung * - "int8" oder "char" - Ein Byte mit Vorzeichen (-127 bis 127). * - "uint8" oder "uchar" - Ein Byte ohne Vorzeichen (0 bis 255). * - "wchar_t" - Ein UTF-16 Unicode-Zeichen (2 Bytes). * - "int16" - 16-bit Integer (2 Bytes). * - "uint16" - 16-bit vorzeichenloser (unsigned) Integer (2 Bytes). * - "int32" - 32-bit Integer (4 Bytes). * - "uint32" - 32-bit unsigned Integer (4 Bytes). * - "int64" - 64-bit Integer (8 Bytes). Da UniScript diesen Wert in einer double-Zahl speichert, sind im Ergebnis nur ca. 52 Bits gültig. * - "uint64" - 64-bit unsigned Integer (8 Bytes). Da UniScript diesen Wert in einer double-Zahl speichert, sind im Ergebnis nur ca. 52 Bits gültig. * - "float" - 32-bit Real-Zahl (4 Bytes). * - "double" - 64-bit Real-Zahl (8 Bytes). .. uparam:: count *count* ist die Anzahl an Werten die gelesen werden sollen. .. uparam:: nRecLen *nRecLen* ist die Anzahl der Bytes, die übersprungen werden sollen, um den nächsten Wert zu lesen (Abstand zwischen zwei Werten). .. uparam:: rvOptions *rvOptions* ist ein Vektor mit 4 Werten: [*nRecLen*, *nBits*, *nBitOffset*, *bBigEndian*]. *nRecLen*: Anzahl an Bytes, die übersprungen werden sollen, um den nächsten Wert zu lesen, falls *count* > 1. Default ist 0, wenn *rvOptions* nicht angegeben wird. *nBits*: 0: Es wird die Größe des unter *ssType* angegebenen Datentyps verwendet, z. B. 32 für "int32". 1 .. 64: Anzahl an Bits die gelesen werden sollen. Der Wert muß kleiner oder gleich der Größe von *ssType* sein, aber größer als der nächst kleinere Typ. Beispiel: Bei *ssType* gleich "int16" kann *nBits* zwischen 9 und 16 liegen, bei *ssType* gleich "int32" kann *nBits* zwischen 17 und 32 betragen. *nBitOffset*: 0 .. 7. Default ist 0, wenn *rvOptions* nicht angegeben wird. *bBigEndian*: 1: Es wird die Big Endian byte order (Motorola) verwendet, 0: Es wird die Little Endian byte order (Intel) verwendet. Default ist 0, wenn *rvOptions* nicht angegeben wird. .. us.example **Beispiel** :: // 100 float-Werte aus Buffer lesen: // Buffer aus Datei lesen, im Buffer an Position 20 Byte springen und ersten // Wert lesen. Die Werte stehen im Abstand von 72 Bytes im Buffer. // Lese 100 Werte. data_buffer = fread(fp, "char8", lenbuffer); rvY = mem_get(data_buffer, 20, "float", 100, 72); Siehe auch :ref:`mem_set`. .. us.history **History** .. list-table:: :header-rows: 1 * - Version - Beschreibung * - R2012.4 - Neuer Parameter *rvOptions* und Aufruf mit 3 Parametern um einen Teilstring zu extrahieren. Neue Bezeichnungen in *ssType* ("int8" und "uint8"). * - 5.8.2 - Zusätzlicher, optionaler Parameter *nRecLen*. * - 5.0.0 - Neuer Typ "wchar_t". * - 4.2.0 - Neu. .. seealso:: :ref:`uberblick-strings`, :ref:`mem_alloc`, :ref:`mem_set`, :ref:`mem_len`, :ref:`strchar`, :ref:`strextract` :sub:`id-1871369`