英文:
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
命令会对这段代码中的int
到string
的转换发出警告,因为通常认为这种转换会创建一个数字的十进制表示。为了消除警告,可以使用rune
而不是int
:
fmt.Println(string(rune(49))) // 输出 1
这适用于任何rune
值,不仅限于ASCII字符的子集。
另一种选项是创建一个包含ASCII值的字节切片,然后将切片转换为字符串:
b := []byte{49}
fmt.Println(string(b)) // 输出 1
适用于所有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
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
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 := '42'
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("number value", i)
s := strconv.Itoa(i)
fmt.Println("string value", s)
a := []rune(s)[0]
fmt.Println("ascii value", a)
n := string(a)
fmt.Println("back to string value", 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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论