Bin makes the runtime system interpret a string variable or the result of a string returning function as binary data. In this case not the Strlen() function is taken for length calculations but the Binlen() function, which returns the actual binary length of the data.
Bin = "bin" "(" String | StringFunc ")".
dclfunc function Assert(b : boolean) <API_FUNCTION> begin if b then Print("ok"); else Print("failed"); end end Assert; function RetString : string begin RetString := "\h11002233"; end RetString; dcltrans transaction TMain var s1, s2, s3 : string; begin s1 := "\h11002233"; // "\h11002233" s2 := "\h550066"; // "\h550066" s3 := s1; // "\h11" s3 := s1 + "\h770088"; // "\h11770088" s3 := "\h770088" + s1; // "\h77008811" s3 := bin(s1); // "\h11002233" s3 := s1 + s2; // "\h1155" s3 := bin(s1) + s2; // "\h1100223355" s3 := s1 + bin(s2); // "\h11550066" s3 := bin(s1) + bin(s2); // "\h11002233550066" s3 := RetString(); // "\h11" s3 := bin(RetString()); // "\h11002233" // comparisons // "\h11" = "\h11" Assert(s1 = s1); // "\h11" = "\h11002233" Assert(not (s1 = bin(s1))); // "\h11002233" = "\h11002233" Assert(s1 + "\h002233" = bin(s1)); end TMain;