ACSUtils Wiki

An ACS library for ZDoom-based ports

User Tools

Site Tools


new:number_parsing

Number parsing functions

Number parsing functions parse strings like “123”, “3.14” or “0xff” and return an integer or fixed-point number of the same value.

Simple number parsing

Simple number parsing functions return 0 if the input string cannot be parsed as a number, and return the minimum or maximum possible value (INT_MIN or INT_MAX) if the input string is a number beyond value limits of ACS variables.

  • int atoi(str s) parses a string as integer and returns its value.
  • fixed atof(str s) parses a string as a fixed-point number and returns its value.

fixed numbers have a limited precision after the point. atof tries to parse fixed-point numbers to the best precision, but is biased toward 0.

Accepted formats

Number parsing functions parse the following number format:

  • Integers: <sign> <base prefix> <digits>
  • Fixed-point numbers: <sign> <base prefix> <digits> . <digits>

There must be no spaces in the string, not even around the number.

Sign can be +, -, or nothing (equivalent to +_.

Base prefix can be one of the following:

  • Nothing – base 10
  • 0x – base 16 (case-insensitive)
  • 0o – base 8
  • 0b – base 2

Advanced parsing functions

  • int, int ParseInt(str s, int default_base)
  • int, fixed ParseFixed(str s, int default_base)

Advanced number parsing functions return two values. The first one is a status code, and the second is parsing result:

  • PARSENUMBER_SUCCESS – no errors happened while parsing the number. The second value is the parsed number
  • PARSENUMBER_OVERFLOW – the value is out of range limits of int. The second value is either INT_MIN or INT_MAX, depending on the sign of the input number.
  • PARSENUMBER_BADFORMAT – the input string doesn't conform to the format. The second value is 0.

The parameter default_base sets the default base to parse the number in if it has no base prefix. Bases up to 36 are supported, using the following digits: 0123456789abcdefghijklmnopqrstuvwxyz. Digits beyond 9 are case-insensitive.

new/number_parsing.txt · Last modified: 2018/02/18 18:01 by korshun