Object PmBuffer (Binary data memory)
Description:
The object represents binary values in data block. Data block (buffer) is a continuous area in the memory. For reading/writing of individual value it is necessary to know its position (offset) in the data block and also the data type (size).
General properties and methods:
AutoOffset | Internal automated position in the data block |
SetSize | Setting the data block size |
GetSize | Detects data block size |
GetLastError | Returns the flag of the last error |
SetBuffer | Writing data block in the form of the PmBuffer object |
GetBuffer | Reading the data block in the form of the PmBuffer object |
SetPtr | Writing pointer (address) to another data block in the form of the PmBuffer object |
GetPtr | Mock reading (skipping) of pointer to another data block |
LoadFromFile | Reading values from binary file into the data block |
SaveToFile | Writing values from data block into a binary file |
CalcCheckSum | Detection of the data block check sum (hash) |
Methods for writing and reading numeric value:
Methods for writing and reading String type value:
SetStringFix | Writing the text string with fixed length |
GetStringFix | Reading the text string with fixed length |
SetStringVar | Writing the text string with variable length (terminated by the NULL character) |
GetStringVar | Reading the text string with variable length (terminated by the NULL character) |
SetHexaString | Writing data block in the form of HexaString |
GetHexaString | Reading the data block in the form of HexaString |
SetBase64String | Writing data block in the form of Base64String |
GetBase64String | Reading the data block in the form of Base64String |
Note:
Comparison of objects used for data storage:
The following object types can be used for holding values (of any data type). Each of these objects has certain advantages and disadvantages and the choice depends on the desired usage.
PmArray: This object contains values that are accessible by index into the array - it is possible to read any value at any time in this object. Reading and writing values is very fast, but adding is slow.
This object is functional only for
JavaScript language. For the
VBScript language the array is represented by
Array data type.
PmMap: This object contains values that are addressed by name (text identifier). Value names represent object properties. The advanatege is the "clarity" of usage in the script code. The disadvantage is the inability to access the values in cycle by index.
PmBuffer: This object contains binary values in data block. For reading/writing of individual value it is necessary to know its position (offset) in the data block and also the data type (size).
Example1:
JavaScriptSelect and copy to clipboard
var oBuf = Pm.CreatePmBuffer();
// Setting the whole content of the data block as HexaString and partial reading of its content into 3 variables of different types
var s1 = "40302010605070";
// The HexaString contains 7 bytes with values 0x40 0x30 0x20 0x10 0x60 0x50 0x70
oBuf.SetHexaString(-2, s1);
// Filling the data block with data from HexaString
oBuf.AutoOffset = 0;
// Setting the automatic position back to beginning
var i32 = oBuf.GetInt32(-4);
// Reading the value into the variable: 0x10203040
var i16 = oBuf.GetInt16(-4);
// Reading the value into the variable: 0x5060
var ui8 = oBuf.GetUint8(-4);
// Reading the value into the variable: 0x70
// Continuous creation of data block by writing 3 variables and then obtaining the whole content as HexaString
oBuf.SetSize(0);
// Setting the new size to 0 and deleting (resetting) of existing content of the data block
oBuf.SetInt32(-2, i32);
// Adds the value from variable to the end: 0x10203040
oBuf.SetInt16(-2, i16);
// Adds the value from variable to the end: 0x5060
oBuf.SetUint8(-2, ui8);
// Adds the value from variable to the end: 0x70
var s2 = oBuf.GetHexaString(0);
// Reading the data block as HexaString. The read value s2 is the same as the original input value s1
Example2:
Reading 4 bytes of the data block by bytes as HexaString or in decimal
JavaScriptSelect and copy to clipboard
var oBuf = Pm.CreatePmBuffer();
oBuf.SetSize(4);
oBuf.SetInt32(0, 1020304050, 0);
Pm.Debug("Hexastring=" + oBuf.GetHexaString());
oBuf.AutoOffset = 0;
var h0 = oBuf.GetHexaString(-4, 1);
var h1 = oBuf.GetHexaString(-4, 1);
var h2 = oBuf.GetHexaString(-4, 1);
var h3 = oBuf.GetHexaString(-4, 1);
Pm.Debug("Hexastring=" + h0 + ", " + h1 + ", " + h2 + ", " + h3);
oBuf.AutoOffset = 0;
var v0 = oBuf.GetUint8(-4);
var v1 = oBuf.GetUint8(-4);
var v2 = oBuf.GetUint8(-4);
var v3 = oBuf.GetUint8(-4);
Pm.Debug("GetUint8=" + v0 + ", " + v1 + ", " + v2 + ", " + v3);