Skip to main content

DecodeCodepointFromOctets

Short summary

This method decodes one code point from octets

Parameters

NameTypeCommentKind
octetsToDecodePOINTER TO BYTEpointer to next octetinput
octetToDecodeCount( 1..4 )number of octetsinput

Code

Declaration

FUNCTION INTERNAL DecodeCodepointFromOctets : UnicodeCodePoint
VAR_INPUT
(* pointer to next octet *)
octetsToDecode :POINTER TO BYTE;
(* number of octets *)
octetToDecodeCount :BYTE(1..4);
END_VAR
VAR
codePoint :UnicodeCodePoint;
END_VAR

Implementation

CASE octetToDecodeCount OF
1:
codePoint := octetsToDecode[0];

2:
codePoint := octetsToDecode[0] AND 16#1F;
codePoint := SHL(codePoint, 6) OR (octetsToDecode[1] AND 16#3F);

3:
codePoint := octetsToDecode[0] AND 16#0F;
codePoint := SHL(codePoint, 6) OR (octetsToDecode[1] AND 16#3F);
codePoint := SHL(codePoint, 6) OR (octetsToDecode[2] AND 16#3F);

4:
codePoint := octetsToDecode[0] AND 16#07;
codePoint := SHL(codePoint, 6) OR (octetsToDecode[1] AND 16#3F);
codePoint := SHL(codePoint, 6) OR (octetsToDecode[2] AND 16#3F);
codePoint := SHL(codePoint, 6) OR (octetsToDecode[3] AND 16#3F);
END_CASE

DecodeCodepointFromOctets := codePoint;