\x和0x的区别

\x和0x的区别

\x0x 分别表示不同进制的数字表示法。

  1. \x:十六进制转义序列

    在字符常量或字符串中,\x 用于表示一个十六进制数。后面紧跟着两个十六进制数字,表示一个字节的十六进制值。例如,\x41 表示ASCII码为65的字符 ‘A’。

    char myChar = '\x41'; // 表示字符 'A'
    

    在其他编程语言或上下文中,\x 的使用方式可能会有所不同,但它通常表示十六进制转义。

  2. 0x:十六进制数表示法

    在数字常量中,0x 前缀表示后面的数字是十六进制数。例如,0x1F 表示十进制的31。

    int myNumber = 0x1F; // 表示十进制的31
    

    这种表示法在很多编程语言中通用,包括C、C++、Java、Python等。

总结:

  • \x 主要用于字符常量或字符串中的十六进制转义序列。
  • 0x 主要用于数字常量中的十六进制数表示法。
func main(){
	a:='\x42' // type rune = int32 utf8编码的字符 在go中为rune类型,区别于byte(ascii)
	b:=0x42   // 16进制数字
	c:="\x42" // 字符串
	fmt.Printf("%v %T %v %T %v %T",a,a,b,b,c,c)
}
-------------------------
66 int32 66 int B string 66 int32

在这里插入图片描述

range 迭代 string 得到的值

range 得到的索引是字符值(Unicode point / rune)第一个字节的位置,与其他编程语言不同,这个索引并不直接是字符在字符串中的位置。

for range 迭代会尝试将 string 翻译为 UTF8 文本,对任何无效的码点都直接使用 0XFFFD rune(�)UNicode 替代字符来表示。如果 string 中有任何非 UTF8 的数据,应将 string 保存为 byte slice 再进行操作。

data := "A\xfe\x02\xff\x04"
fmt.Println(data) // A�╗�╝

func main() {
    data := "A\xfe\x02\xff\x04"
    for _, v := range data {
        fmt.Printf("%#x ", v)    // 0x41 0xfffd 0x2 0xfffd 0x4    // 错误
    }

    for _, v := range []byte(data) {
        fmt.Printf("%#x ", v)    // 0x41 0xfe 0x2 0xff 0x4    // 正确
    }
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Generalzy

文章对您有帮助,倍感荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值