将整数转换为ASCII码 – 在rune字面值中有多个字符

huangapple go评论85阅读模式
英文:

convert int to ascii - more than one character in rune literal

问题

如何将整数转换为ASCII码?

在Java中,可以使用以下代码将整数转换为ASCII码:System.out.println((char)(49)); //输出1

在Go语言中,你可以尝试以下代码:

a := 42
fmt.Println(string(a))

这将输出ASCII码对应的字符。但是,如果你尝试将字符串赋值给变量a,然后将其转换为rune类型,你可能会遇到more than one character in rune literal的错误。这是因为rune类型只能表示一个字符,而不是一个字符串。如果你想将字符串转换为ASCII码的字符,可以使用[]rune将字符串转换为rune切片,然后逐个打印字符。例如:

a := "42"
for _, r := range []rune(a) {
    fmt.Println(string(r))
}

这将逐个打印出字符串中每个字符对应的ASCII码字符。

英文:

How do I convert into to its ASCII?

In java it's System.out.println((char)(49)); //gives 1

I tried

a := '42'
fmt.Println(rune(a))

I get more than one character in rune literal

答案1

得分: 5

使用string conversion将ASCII数值转换为包含ASCII字符的字符串:

fmt.Println(string(49)) // 输出 1

go vet命令会对这段代码中的intstring的转换发出警告,因为通常认为这种转换会创建一个数字的十进制表示。为了消除警告,可以使用rune而不是int

fmt.Println(string(rune(49))) // 输出 1

在 playground 上运行

这适用于任何rune值,不仅限于ASCII字符的子集。

另一种选项是创建一个包含ASCII值的字节切片,然后将切片转换为字符串:

b := []byte{49}
fmt.Println(string(b)) // 输出 1

在 playground 上运行

适用于所有rune的变体如下:

b := []rune{49}
fmt.Println(string(b)) // 输出 1
英文:

Use a string conversion to convert an ASCII numeric value to a string containing the ASCII character:

fmt.Println(string(49)) // prints 1

The go vet command warns about the int to string conversion in the this code snippet because the conversion is commonly thought to create a decimal representation of the number. To squelch the warning, use a rune instead of an int:

fmt.Println(string(rune(49))) // prints 1

Run it on the playground.

This works for any rune value, not just the ASCII subset of runes.

Another option is to create a slice of bytes with the ASCII value and convert the slice to a string.

b := []byte{49}
fmt.Println(string(b))  // prints 1

Run it on the playground

A variation on the previous snippet that works on all runes is:

b := []rune{49}
fmt.Println(string(b))  // prints 1

答案2

得分: 3

fmt.Printf("%c", 49)

这段代码的作用是打印字符 "1"。

英文:
fmt.Printf("%c", 49)

</details>



# 答案3
**得分**: 1

你收到此错误的原因是在这个变量中:
```go
a := '42'

一个字节文字只能包含一个字符,改用以下方式:

a := byte(42)

编辑:
使用string(a)来获得预期的结果,就像boo所说的那样。

英文:

The reason you're getting this error is in this variable:

a := &#39;42&#39;

A byte literal may only contain one character, use this instead;

a := byte(42)

Edit:
Use string(a) to get the expected results, like boo said.

答案4

得分: 0

我应该这样做,用非常简单的术语解释。

i := 1
fmt.Println("数字值", i)

s := strconv.Itoa(i)
fmt.Println("字符串值", s)

a := []rune(s)[0]
fmt.Println("ASCII值", a)

n := string(a)
fmt.Println("转回字符串值", n)

输出如下:

数字值 1
字符串值 1
ASCII值 49
转回字符串值 1

我知道这不是最好的答案,但它仍然可以正常工作,没有任何问题。

英文:

I suppose to do like this, in a very simple term explaining.

i := 1
fmt.Println(&quot;number value&quot;, i)

s := strconv.Itoa(i)
fmt.Println(&quot;string value&quot;, s)

a := []rune(s)[0]
fmt.Println(&quot;ascii value&quot;, a)

n := string(a)
fmt.Println(&quot;back to string value&quot;, n)

and output is following:

number value 1
string value 1
ascii value 49
back to string value 1

I know this is not the best one answer, but still it works fine without any issue.

huangapple
  • 本文由 发表于 2021年5月28日 13:02:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/67733156.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定