Home > OS >  In Kotlin, why does char.toInt() return the number 48?
In Kotlin, why does char.toInt() return the number 48?

Time:10-31

I was making some code to put my tiles into a mutableMap of the tiles and their coords based on their tags I manually put in, and I found that char.toString().toInt() returns the character as a number like expected, but for some reason, char.toInt() returns it as a number 48. Why does it do this? Here's my code that shows this:

    board.forEach { tile: View ->
        var x: Int? = null
        var y: Int? = null
        tile.tag.toString().toCharArray().forEach { c: Char ->
            if(c.isDigit() && x == null) x = c.toInt() else if(c.toString() != "," && y == null) y = c.toString().toInt()
        }
        tileMap[Coord(x!!, y!!)] = tile
    }

I have some code that prints the tile's tag (which is what is used to determine the Coords for the tileMap) and the tile's Coords' x & y values (from the tileMap) whenever you tap on them. So for example, when I tap on a tile 1 to the right of the bottom left corner, I expect to see "1,0 | (X: 1, Y: 0)" but instead (when both x and y are defined by char.toInt()) I get "1,0 | (X: 49, Y: 48)"

A tile at Coords x=1, y=2 (tag = "1,2") when put into the tileMap would have its coords in the map input like this: | tileMap X definition | tileMap Y definition | Coords from tileMap | Actual Coords(from its tag) | |:----:|:------:|:------:|:-----:| | char.toInt() | char.toInt() | "49, 50" | "1, 2" | | char.toString().toInt() | char.toString().toInt() | "1, 2" | "1, 2" | | char.toInt() | char.toString().toInt() | "49, 2" | "1, 2" | Why does char.toInt() (and char.code) return 48 more than the number?

CodePudding user response:

Because computers generally process numbers, each character is internally represented as a number. When using ASCII character encoding, each character is a number in 0-127 range. Unicode is more complicated, but let's stick to ASCII for simplicity.

If we look into the ASCII table, we can see that for example the letter A is internally stored as a decimal value 65. Digit 0 is stored as 48, digit 1 as 49 and so on.

char.toInt() doesn't mean: "interpret this character as a digit and return it as integer". It means: "return an internal numeric value for this character". And as we can see in the ASCII table, internal representation of 0 is 48.

  • Related