A string in Cairo is represented via ASCII and can be at most 31 characters long.

"Why only 31 characters?"

A string will be represented via a Field Element (felt) which is currently a 252-bit number. Each ASCII character is represented via 8 bits.

1 Field Element = 252 bits

1 ASCII character = 8 bits

252 / 8 = 31.5

We can therefore store 31 characters in one felt (Field Element).

The string's first character is the most significant byte of the integer (big-endian representation).

Note that there isn't first-class citizen support for strings in Cairo. Strings are simply numbers stored in a Field Elements.


func main():
    # String in human-readable format.
    let greeting_string = 'Hello World!'

    # The same string represented as an integer.
    let greeting_decimal = 22405534230753928650781647905

    # And as a hexadecimal value.
    # Use an ASCII table such as to map the
    #   hexadecimal values to the individual characters.
    #   e.g. search for the character `H` which equals `48` in hex.
    let greeting_hexadecimal = 0x48656C6C6F20576F726C6421

    assert greeting_string = greeting_decimal
    assert greeting_decimal = greeting_hexadecimal

    return ()