如何以十六进制表示法构建转义序列字符串。
示例:
string s = "\x1A"; // this will create the hex-value 1A or dec-value 26
我希望能够像这样构建十六进制值在 00 到 FF 之间的字符串(在本例中为 1B)
string s = "\x" + "1B"; // Unrecognized escape sequence
也许还有另一种制作十六进制字符串的方法...
请尽量避免使用
\x
转义序列。它很难阅读,因为它停止的位置取决于数据。例如,这两个字符串乍一看有多大区别?
"\x9Good compiler"
"\x9Bad compiler"
在前者中,“\x9”是制表符 - 转义序列在那里停止,因为“G”不是有效的十六进制字符。在第二个字符串中,“\x9Bad”都是转义序列,留下一些随机的 Unicode 字符和“编译器”。
我建议你使用 \u 转义序列来代替:
"\u0009Good compiler"
"\u0009Bad compiler"
(当然,对于选项卡,您可以使用
\t
,但我希望您明白我的意思......)
这当然有点偏离最初的问题,但已经得到了回答:)
您不在字符串中存储十六进制值。
你可以,但它只是一个字符串,并且必须转换为整数或字节才能实际读取其值。
您可以将十六进制值作为文字分配给 int 或 byte:
Byte value = 0x0FF;
int value = 0x1B;
因此,可以轻松地将十六进制文字传递到字符串中:
string foo = String.Format("{0} hex test", 0x0BB);
这将创建这个字符串“126 hex test”。
但我认为这不是你想要的?
十六进制16位unicode字符代码有一个'\u'转义码。
Console.WriteLine( "Look, I'm so happy : \u263A" );
接受的答案包含以下声明:
您不在字符串中存储十六进制值。
通常这是真的。
适合将奇怪的“通常不可打印”字符存储在字符串中的问题范围相当小。但工作技能“整合”似乎正在上升,这是你可能想做OP建议的地方。
如果您正在处理文件,您可能会发现数据中存在需要忽略的自定义字符集。
在这种情况下,在字符串中存储不可打印的字符(制表符、转义符等)可能是一种可行的方法。
空白
,尽管本示例中的一些字符是可打印的,并且术语空白通常仅指不可打印的字符。
这样写比较容易。
例如,您可能要求以下
空白:
空格(0x32)、制表符(或0x9)、不间断空格(0xA0)、下划线(_)和破折号(-)新行、m-dash 和 n-dash
)。
readonly string whiteSpace = "\u0032\t\u00A0_-";
在此示例中,您可以对前面的字符串使用 Contains 来检测哪些字符是空格(使用上面给出的定义或任何其他自定义定义)。
如果用户/业务分析师有在开发期间和/或发布前不久更改需求的历史,那么将这些特殊字符加载到字符串中是一个特别好的选择。
我无权向已接受的答案添加评论,我猜是因为它的年龄。鉴于出现的“集成”工作数量不断增加,这个问题和这个答案所提出的观点都与当今的许多开发人员相关(在提出这个问题 15 年后)。