理解字符串转义序列

时间:2018-06-19 07:41:15

标签: go bytebuffer

我是新手,所以关于字节概念的混淆很多。

在浏览一些代码时,我遇到了一些像

这样的东西
[]byte("\xd2\xfd\x88g\xd5\r-\xfe")

是六进制还是字节格式?

上面的一些字符如g,r-,e表示什么?

如何在日志中打印?

1 个答案:

答案 0 :(得分:0)

[]byte("\xd2\xfd\x88g\xd5\r-\xfe")是一个解释后的字符串文字,转换为[]byte类型,byte切片。在这里它被分成字节值:

[\xd2, \xfd, \x88, g, \xd5, \r, -, \xfe]

或表示为十六进制字节

[d2, fd, 88, 67, d5, 0d, 2d, fe]

记录值的一种方法,

package main

import "log"

func main() {
    b := []byte("\xd2\xfd\x88g\xd5\r-\xfe")
    log.Printf("%q\n", b)
}

游乐场:https://play.golang.org/p/BIh_EuvoxU-

输出:

2009/11/10 23:00:00 "\xd2\xfd\x88g\xd5\r-\xfe"
  

The Go Programming Language Specification

  

String literals

     

字符串文字表示从中获取的字符串常量   连接一系列字符。有两种形式:原始   字符串文字和解释的字符串文字。

     

原始字符串文字是后引号之间的字符序列,如   foo。在引号内,除反向引号外,任何字符都可能出现。   原始字符串文字的值是由字符串组成的字符串   未解释的(隐式UTF-8编码)字符之间   报价;特别是,反斜杠没有特殊含义   字符串可能包含换行符。里面有回车符('\ r')   原始字符串文字将从原始字符串值中丢弃。

     

解释的字符串文字是double之间的字符序列   引号,如“bar”中所示。在引号内,可能会出现任何字符   除了换行符和未转义的双引号。引号之间的文字   形成文字的值,反斜杠转义被解释为   他们是符文文字(除非“非法”和“合法”),   有相同的限制。三位八进制(\ nnn)和两位数   十六进制(\ xnn)转义表示结果的单个字节   串;所有其他转义表示(可能是多字节)UTF-8   单个字符的编码。因此在字符串文字内\ 377   和\ xFF表示值为0xFF = 255的单字节,而ÿ,\ u00FF,   \ U000000FF和\ xc3 \ xbf表示UTF-8的两个字节0xc3 0xbf   编码字符U + 00FF。

  

反斜杠后,某些单字符转义表示特殊   值:

\a   U+0007 alert or bell
\b   U+0008 backspace
\f   U+000C form feed
\n   U+000A line feed or newline
\r   U+000D carriage return
\t   U+0009 horizontal tab
\v   U+000b vertical tab
\\   U+005c backslash
\'   U+0027 single quote  (valid escape only within rune literals)
\"   U+0022 double quote  (valid escape only within string literals)