Working with binary data in Delphi and C++ Builder
In both Delphi and C++ Builder binary data can be get or set using byte arrays. In recent versions of Delphi and C++ Builder that support TBytes, event parameters and properties that hold binary data are of type TArray
Properties and event parameters that may hold binary data have a corresponding string property as well. The binary version has the same name as the string version, but ends with a B. For instance there is a DataToSend and DataToSendB property in the IPPort component.
Delphi - Sending Data
To set binary data to a component property assign a variable of type TBytes to the component property. For instance:
procedure TForm1.Button2Click(Sender: TObject);
var
myArray: TBytes; //TArray may also be used in place of TBytes here
begin
myArray:= TBytes.Create(72,69,76,76,79);
ipwIPPort1.Connect('localhost',777);
ipwIPPort1.DataToSendB := myArray;
end;
Alternatively, a dynamic array may be created and cast to TBytes when assigned to the component instance. For instance:
procedure TForm1.Button2Click(Sender: TObject);
var
myArray : array of byte; //dynamic array
begin
SetLength(myArray,5);
myArray[0] := 72;
myArray[1] := 69;
myArray[2] := 76;
myArray[3] := 76;
myArray[4] := 79;
ipwIPPort1.Connect('localhost',777);
ipwIPPort1.DataToSendB := TBytes(myArray);
end;
Note: In Delphi versions which do not natively defined TBytes (Delphi 5,6,7,2006) use the second approach of casting a dynamic array to TBytes on assignment.
Delphi - Receiving Data
Two event parameters exist for each value in the API that may contain binary data. For instance a Text (string) and TextB (TBytes) parameter exist in the DataIn event of the IPPort component. The event definition explicitly defines both parameters. The parameter of type TBytes may be directly accessed or passed to other methods which accept a TBytes parameter such as the TEncoding class. For instance:
procedure TForm1.ipwIPPort1DataIn(Sender: TObject; Text: string;
TextB: TArray; EOL: Boolean);
begin
Memo1.Lines.Add(TEncoding.Default.GetString(TextB));
end;
C++ Builder - Sending Data
To set binary data to a component property assign a variable of type TByteDynArray to the component property. For instance:
TByteDynArray myArray;
myArray.set_length(5);
myArray[0] = 72;
myArray[1] = 69;
myArray[2] = 76;
myArray[3] = 76;
myArray[4] = 79;
ipwIPPort1->DataToSendB = myArray;
C++ Builder - Receiving Data
Two event parameters exist for each value in the API that may contain binary data. For instance a Text (string) and TextB (TByteDynArray) parameter exist in the DataIn event of the IPPort component. The event definition explicitly defines both parameters. The parameter of type TByteDynArraymay be directly accessed or passed to other methods which accept a TByteDynArrayparameter such as the TEncoding class. For instance:
void __fastcall TForm3::ipwIPPort1DataIn(TObject *Sender, TipwIPPortDataInEventParams *e)
{
Memo1->Lines->Add(TEncoding::Default->GetString(e->TextB));
}
We appreciate your feedback. If you have any questions, comments, or suggestions about this article please contact our support team at support@nsoftware.com.