но это дает мне то, что я считаю значениями ASCII - я знаю, что могу просто вычесть 48, но это выглядит немного странно.
Это не хакерство. У вас есть байт, представляющий цифру ascii, и вы хотите получить его значение в виде целого числа от 0 до 9. Вот как ты это делаешь. Это также, как преобразование строки в целое число работает в целом. Этот метод преобразует каждый отдельный байт в число.
Представление UTF-8 для '0' не изменится в ближайшее время. Конечно, вместо вычитания 48
вы можете вычесть '0'
.
Чтобы сделать его более универсальным, возможно, вам также следует вернуть логическое значение, указывающее, можно ли преобразовать байт или нет.
func ByteToInt(c byte) (int, bool) {
if c >= '0' && c <= '9' {
return int(c - '0'), true
} else {
return 0, false
}
}
Вы можете использовать это в своем примере кода, и он даст ожидаемый результат:
package main
import (
"fmt"
)
func ByteToInt(c byte) (int, bool) {
if c >= '0' && c <='9' {
return int(c - '0'), true
} else {
return 0, false
}
}
func main() {
toCheck := "987654321"
var toSum []int
for i := len(toCheck) - 2; i >= 0; i = i-2 {
var digit, _ = ByteToInt(toCheck[i])
toSum = append(toSum, digit)
}
fmt.Println(toSum)
}
https://play.golang.org/p/MRqtgY0ugZY
Результат - то, что вы ожидаете: [2 4 6 8]