单字节上的Golang-ToUpper()?

单字节上的Golang-ToUpper()?,go,byte,uppercase,lowercase,Go,Byte,Uppercase,Lowercase,我有一个[]字节,b,我想选择一个字节,b[pos],并将其改为大写(然后是小写)字节类型有一个名为ToUpper()的方法。如何将其用于单个字节 在单字节上调用ToUpper 其中一个给出的效率最高(打了几千次电话时),我使用 以查找字节并更改值 b[pos] = val 检查字节是否为高位 有时候,我不想改变字节的大小写,而是想检查一个字节是大写还是小写;所有大写罗马字母字节都低于小写字节的值 func (b Board) isUpper(x int) bool { return

我有一个
[]字节
b
,我想选择一个字节,
b[pos]
,并将其改为大写(然后是小写)
字节
类型有一个名为
ToUpper()
的方法。如何将其用于单个字节

在单字节上调用
ToUpper
其中一个给出的效率最高(打了几千次电话时),我使用

以查找字节并更改值

b[pos] = val
检查字节是否为高位 有时候,我不想改变字节的大小写,而是想检查一个字节是大写还是小写;所有大写罗马字母字节都低于小写字节的值

func (b Board) isUpper(x int) bool {
    return b.board[x] < []byte{0x5a}[0]
}
func(b板)为上(x int)布尔{
返回b.board[x]<[]字节{0x5a}[0]
}

使用以下代码测试电路板的某个元素是否为ASCII大写字母:

func (b Board) isUpper(x int) bool {
    v := b.board[x]
    return 'A' <= v && v <= 'Z'
}
func(b板)为上(x int)布尔{
v:=b.板[x]

对于单个字节/符文,返回“A”,您可以使用


我想提醒OP,
bytes.ToUpper()
在字节片中使用UTF-8编码的unicode代码点上运行,
unicode.ToUpper()
在单个unicode代码点上运行

通过要求将单个字节转换为大写,OP意味着“
b
”字节片包含UTF-8以外的内容,可能是ASCII-7或某些8位编码,如ISO拉丁语-1(例如)。在这种情况下,OP需要编写ISO拉丁语-1(例如
ToUpper()
函数,或者OP必须转换ISO拉丁语-1(例如)在使用
bytes.ToUpper()
unicode.ToUpper()函数之前,将字节转换为UTF-8或unicode


如果没有,就会产生一个挂起的bug。前面提到的两个函数都不能正确地将所有可能的ISO Latin-1(例如)编码字符转换为大写。

您可以使用
字节。ToUpper
,您只需要将输入设为一个片段, 并将输出设为字节:

package main
import "bytes"

func main() {
   b, pos := []byte("north"), 1
   b[pos] = bytes.ToUpper(b)[pos]
   println(string(b) == "nOrth")
}

这会改变所选字节的值吗?我发现这种方法可以将特殊的unicode字符转换成大写。
func (b Board) isUpper(x int) bool {
    return b.board[x] <= 'Z'
}
b[pos] = byte(unicode.ToUpper(rune(b[pos])))
package main
import "bytes"

func main() {
   b, pos := []byte("north"), 1
   b[pos] = bytes.ToUpper(b)[pos]
   println(string(b) == "nOrth")
}