Copies a one-byte unsigned character into a data structure at a specified position. You must declare a BDL string before using this function; see Data Structure Functions for further information.
This function can also be used to convert an ASCII representation of a hexadecimal string to a hexadecimal string by using a custom function. See the example below.
Kernel.bdh
SetUChar( inout sString : string, in nPos : number, in nChar : number ) : boolean;
true if successful
false otherwise
| Parameter | Description |
|---|---|
| sString | BDL string corresponding to the data structure |
| nPos | Insert position in the BDL string, where the first position is 1 (not 0) |
| nChar | Unsigned character |
dcltrans transaction TSetUChar const SIZE_STRUCT := 32; var myBDLstring : string(SIZE_STRUCT); bOk : boolean; begin // Set a one-byte unsigned character at position 32 // in the BDL string myBDLstring and thereby (through mapping) set // the element myUChar in Struct1 bOk := SetUChar(myBDLstring, 32, 255); if bOk then write("myUChar successfully set to 255"); writeln; else write("error setting myUChar"); writeln; end; end TSetUChar;
myUChar successfully set to 255
benchmark MyBenchmarkName
use "Kernel.bdh"
dcluser
user
VUser
transactions
TMain : 1;
//converts each char to decimal value
dclfunc
function GetDecFromAsciiHexStr(sAsciiHex: string): number
var
nDecPart : number;
sTemp : string;
i, j : number;
nDec : number;
nFactor : number;
begin
nDec := 0;
for i:=1 to 2 do
sTemp[1]:=sAsciiHex[i];
if sTemp="0" then
nDecPart := 0;
elseif sTemp="1" then
nDecPart := 1;
elseif sTemp="2" then
nDecPart := 2;
elseif sTemp="3" then
nDecPart := 3;
elseif sTemp="4" then
nDecPart := 4;
elseif sTemp="5" then
nDecPart := 5;
elseif sTemp="6" then
nDecPart := 6;
elseif sTemp="7" then
nDecPart := 7;
elseif sTemp="8" then
nDecPart := 8;
elseif sTemp="9" then
nDecPart := 9;
elseif sTemp="A" then
nDecPart := 10;
elseif sTemp="B" then
nDecPart := 11;
elseif sTemp="C" then
nDecPart := 12;
elseif sTemp="D" then
nDecPart := 13;
elseif sTemp="E" then
nDecPart := 14;
elseif sTemp="F" then
nDecPart := 15;
end;
if i=1 then
nDecPart := nDecPart*16;
end;
nDec := nDec + nDecPart;
end;
GetDecFromAsciiHexStr := nDec;
end GetDecFromAsciiHexStr;
dcltrans
transaction TMain
var
sStringWithHexVal: string;
nLengthS : number;
sAsciiHex : string;
sHex : string;
nDec : number;
i, j : number;
begin
//example of string to convert
sStringWithHexVal := "03CA00000041";
print("sStringWithHexVal: "+ sStringWithHexVal);
nLengthS := strlen(sStringWithHexVal);
print("nLengthS: "+string(nLengthS));
i := 1;
j := 1;
while i < nLengthS do //rebuild string in hex using decimal values
sAsciiHex := sStringWithHexVal[i]+sStringWithHexVal[i+1];
nDec := GetDecFromAsciiHexStr(sAsciiHex);
print(string(i)+": " + sAsciiHex + " -> " + string(nDec));
SetUChar(sHex, j, nDec);
j:= j + 1;
i:= i + 2;
end;
writedata(sHex, BinLen(sHex), OPT_WRITEDATA_HEX); //result string
end TMain;