34 lines
886 B
XML
34 lines
886 B
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1">
|
|
<POU Name="FC_HashFNV1a_32Bit" Id="{59a77c23-437d-4f1e-ae71-d5303ce54b27}" SpecialFunc="None">
|
|
<Declaration><![CDATA[FUNCTION FC_HashFNV1a_32Bit : UDINT
|
|
VAR_INPUT
|
|
psKey : POINTER TO STRING;
|
|
END_VAR
|
|
VAR
|
|
// FNV-1a Hash value, seeded with starting value
|
|
_udiHash : UDINT := 16#811C9DC5;
|
|
|
|
_uiCounter : UINT;
|
|
END_VAR
|
|
|
|
VAR CONSTANT
|
|
// FNV-1a prime number for a 32bit hash
|
|
udiPrime : UDINT := 16#01000193;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[// Version 1.2
|
|
IF psKey = 0 THEN
|
|
FC_HashFNV1a_32Bit := 0;
|
|
RETURN;
|
|
END_IF
|
|
WHILE psKey^[_uiCounter] <> 0 DO
|
|
_udiHash := (_udiHash XOR BYTE_TO_UDINT(psKey^[_uiCounter])) * udiPrime;
|
|
_uiCounter := _uiCounter + 1;
|
|
END_WHILE
|
|
|
|
// Return calculated Hash
|
|
FC_HashFNV1a_32Bit := _udiHash;]]></ST>
|
|
</Implementation>
|
|
</POU>
|
|
</TcPlcObject> |