60508


golangにて、以下のようにstringの"abcdef"をbyteスライスにすると、数字になります。  
逆に、byteスライスをstringでキャストすると文字列が返ってきます。

一体この数字は何を示しているのでしょうか。

[code]

    abcdef => 97 98 99 100 101 102 103
    
[/code]

連番になっているので、何かに準拠しているのだとは思うのですが…

[code]

    []byte("abcdefg") => 97 98 99 100 101 102 103
    
    string([]byte{97, 98, 99, 100, 101, 102, 103}) => abcdef
    
[/code]


CC BY-SA 4.0
2019-11-14T06:05:43.013
60503
2019-11-14T06:19:45.690
2019-11-14T06:17:29.690
3060
36541
question
go
文字列をbyteスライスした結果の数字は何を示しているのでしょうか？


アスキーコードの10進数でないかと思います。  
以下を参照してください  
<http://www3.nit.ac.jp/~tamura/ex2/ascii.html>


CC BY-SA 4.0
2019-11-14T06:10:13.687
60504
2019-11-14T06:10:13.687
36617
60503
answer


「a」「b」「c」…それぞれの文字に割り当てられているASCIIコードです。

<http://e-words.jp/p/r-ascii.html>


CC BY-SA 4.0
2019-11-14T06:11:59.080
60505
2019-11-14T06:11:59.080
30745
60503
answer


これは UTF-8 という文字コードで文字列をエンコードした結果の数値です。特に abcdefg
という文字列では、[ASCII](https://ja.wikipedia.org/wiki/ASCII)という古くから使われている文字コードと一致します。

コンピュータの内部では全て数値でデータを保存しているので、文字列データも内部的には数値の列として保存されています。Go においては文字列は全て
Unicode の UTF-8 という文字コードのルールに従って数値化されており、このルールに従うと `"a"` は 97、`"b"` は
98、といった風になります。UTF-8 や ASCII では a～z、A～Z の文字に対応する数値はそれぞれ連番になっており、`"abc"`
を数値列にすると連番になったというわけです。

少しだけ注意が必要なのは、1 文字 1 byte という訳ではないということです。たとえば……：

[code]

    func printBytes(s string) {
        fmt.Println([]byte(s))
    }
    
    func main() {
        printBytes("a")
        printBytes("あ")
        printBytes("α")
        printBytes("")
        printBytes("‍‍‍")
    }
    
[/code]

出力：

[code]

    [97]
    [227 129 130]
    [206 177]
    [240 159 152 139]
    [240 159 145 168 226 128 141 240 159 145 169 226 128 141 240 159 145 166 226 128 141 240 159 145 166]
    
[/code]

[Go Playground](https://play.golang.org/p/KCoJqjlubGq)


CC BY-SA 4.0
2019-11-14T06:19:45.690
60508
2019-11-14T06:19:45.690
19110
60503
answer