Download

What method of CRC calculation is used in .uasset files on strings?

When opening a .uasset file in a hex editor, one can find a long list of strings.
These strings are placed one after the other.
It seems that it first lists the string length + nullbyte, then the string itself (+ nullbyte), followed by some 32-bit integer.
I believe that this value is a CRC, but I can’t seem to find the correct algorithm that is calculating them.
For example, the following from my hex editor:

0F 00 00 00 54 61 62 6C 65 5F 41 6C 6C
49 74 65 6D 73 00 62 7F 20 09

First, it shows the length (0x0f, or 15), then the string (Table_AllItems), then followed by 62 7F 20 09.
Using an online CRC calculator, doesn’t seem to find this value from the string.
https://crccalc.com/?crc=Table_AllItems&method=crc32&datatype=ascii&outtype=hex
It doesn’t give the correct value for the hex value with the nullbytes appended either.

The code that calculates the CRC seems to be at https://github.com/EpicGames/UnrealEngine/blob/4.26/Engine/Source/Runtime/Core/Private/Misc/Crc.cpp, where it uses the standard polynomial, or the IEEE table for slicing-by-8.

The documentation for string hashing mentions the HashString function, which calls StrCrc, so this is the reason that I assume that it’s CRC.

Is this in fact a calculation of CRC in the .uasset files, or is it a different calculation I should look at?

Thanks!