Skip to content

Commit

Permalink
fmt: Add support for capital '%X' format verb for scanning
Browse files Browse the repository at this point in the history
For printing, the format verb '%X' results in a capitalized
hex-representation of the formatted value. Conversely, using
'%X' in a Scanf function should scan a hex-representation
into the given interface{}. The existing implementation
however only supports '%X' for scanning hex values into
integers; strings or byte slices remain empty. On the other
hand, lower-case '%x' supports strings and byte slices just
fine. This is merely an oversight, which this commit fixes.
(Additional tests also included.)

    Fixes golang#12940

Change-Id: I178a7f615bae950dfc014ca8c0a038448cf0452a
Reviewed-on: https://go-review.googlesource.com/15689
Reviewed-by: Andrew Gerrand <[email protected]>
  • Loading branch information
Thorben Krueger authored and adg committed Oct 20, 2015
1 parent 0bf515c commit 26fe24c
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/fmt/scan.go
Original file line number Diff line number Diff line change
Expand Up @@ -813,15 +813,15 @@ func (s *ss) scanComplex(verb rune, n int) complex128 {
// convertString returns the string represented by the next input characters.
// The format of the input is determined by the verb.
func (s *ss) convertString(verb rune) (str string) {
if !s.okVerb(verb, "svqx", "string") {
if !s.okVerb(verb, "svqxX", "string") {
return ""
}
s.skipSpace(false)
s.notEOF()
switch verb {
case 'q':
str = s.quotedString()
case 'x':
case 'x', 'X':
str = s.hexString()
default:
str = string(s.token(true, notSpace)) // %s and %v just return the next word
Expand Down
2 changes: 2 additions & 0 deletions src/fmt/scan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,12 +255,14 @@ var scanfTests = []ScanfTest{
// Strings
{"%s", "using-%s\n", &stringVal, "using-%s"},
{"%x", "7573696e672d2578\n", &stringVal, "using-%x"},
{"%X", "7573696E672D2558\n", &stringVal, "using-%X"},
{"%q", `"quoted\twith\\do\u0075bl\x65s"` + "\n", &stringVal, "quoted\twith\\doubles"},
{"%q", "`quoted with backs`\n", &stringVal, "quoted with backs"},

// Byte slices
{"%s", "bytes-%s\n", &bytesVal, []byte("bytes-%s")},
{"%x", "62797465732d2578\n", &bytesVal, []byte("bytes-%x")},
{"%X", "62797465732D2558\n", &bytesVal, []byte("bytes-%X")},
{"%q", `"bytes\rwith\vdo\u0075bl\x65s"` + "\n", &bytesVal, []byte("bytes\rwith\vdoubles")},
{"%q", "`bytes with backs`\n", &bytesVal, []byte("bytes with backs")},

Expand Down

0 comments on commit 26fe24c

Please sign in to comment.