Skip to main content

EncodeCodePointToOctet

Short summary

This function encodes one code point to octets

Parameters

NameTypeCommentKind
codePointUnicodeCodePointcodepoint valueinput
octetCount( 1..4 )number of ctetsinput
targetOctetBufferPOINTER TO BYTEbuffer where the octets are storedinput

Code

Declaration

FUNCTION INTERNAL EncodeCodePointToOctet
VAR_INPUT
(* codepoint value *)
codePoint :UnicodeCodePoint;
(* number of ctets *)
octetCount :BYTE(1..4);
(* buffer where the octets are stored *)
targetOctetBuffer :POINTER TO BYTE;
END_VAR

Implementation

CASE octetCount OF
1:
targetOctetBuffer[0] := TO_BYTE(codePoint);

2:
targetOctetBuffer[0] := 16#C0 OR TO_BYTE(SHR(codePoint,6));
targetOctetBuffer[1] := 16#80 OR TO_BYTE(codePoint AND 16#3F);

3:
targetOctetBuffer[0] := 16#E0 OR TO_BYTE(SHR(codePoint,12));
targetOctetBuffer[1] := 16#80 OR TO_BYTE(SHR(codePoint,6) AND 16#3F);
targetOctetBuffer[2] := 16#80 OR TO_BYTE(codePoint AND 16#3F);

4:
targetOctetBuffer[0] := 16#F0 OR TO_BYTE(SHR(codePoint,18));
targetOctetBuffer[1] := 16#80 OR TO_BYTE(SHR(codePoint,12) AND 16#3F);
targetOctetBuffer[2] := 16#80 OR TO_BYTE(SHR(codePoint,6) AND 16#3F);
targetOctetBuffer[3] := 16#80 OR TO_BYTE(codePoint AND 16#3F);
END_CASE