Golangでbyte型の値をint型に変換する際に苦戦したのでメモしておく。

検索をすると、[]byte型からint64型に変換するといった内容は引っかかるけれども、冒頭のbyte型からint型は見当たらなかった。


冒頭の課題を解決するために書いたコードは下記になる。

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var b byte
	b = '9' // int型の1をシングルクオートで囲み、byte型に変える

	i := byte2int(b)
	fmt.Println(i)
}

// byte型からint型に変換する
func byte2int(b byte) int {
	//念の為にbyteの値が1桁の整数であるか調べる
	if b < '0' || b > '9' {
		return 0
	}

	//string関数を利用する為、byte型の値を[]byte型に変換する
	bytes := []byte{b}
	str := string(bytes)

	//strconv.Atoiでstring型からint型に変換する
	i, err := strconv.Atoi(str)
	if err != nil {
		return 0
	}

	return i
}

余談だけれども、なんでbyte型の値を扱っているか?に触れておくと、字句解析器を学ぶ為に段階的な機能として入力した文字列を一文字ずつにばらすようにしていて、ばらした値を保持しておく時に整数や演算子を型を気にしたくないためにbyteに変換していた。

字句解析器を作る為にデータ構造のスタックを見る