... or a misunderstanding on my part ?
From string "\x0CTUV", the compiler generates 0x0C 0x55 0x56 0x57 0x00
From string "\x0CABC", the compiler generates 0xCA 0x42 0x43 0x00 ... rather than the expected 0x0C 0x41 0x42 0x43 0x00
I thought the \x escape sequence in a string instructed the compiler to encode the very next two characters as a hexadecimal byte.
Am I missing something ?
Don't assume that it will encode the next two characters. If the next character after your constant is a valid hexadecimal character, I recommend that you do: "\x0C""ABC" to make sure that you have separated your hexadecimal character from any following characters.
I recommend that you do: "\x0C""ABC"
Alternatively you could use three digit octal constants. I find the concatenated string literal approach a bit hard on the eye.
Who says that Octal constants are guaranteed to be exactly three digits?
Again, the spec says:
"Each octal or hexadecimal escape sequence is the longest sequence of characters that can constitute the escape sequence."
When written just as:
"\x0C""ABC"
I agree with you - but I would argue that's just poor presentation.
You could easily write it much more clearly; eg,
"\x0C" "ABC"
Which, I think, makes it mach clearer that there's an initial "special" code, followed by some plain text.
Comments should, of course, be provided to explain this...
Now that I like. Thanks!
View all questions in Keil forum