使用十进制值作为十六进制值
Use a Decimal Value as a Hexadecimal Value
我有整数 15
(或字符串 "15"
,这很简单),我需要用它来创建值:
"\u0015"
是否有某种转换可以实现这一点?我不能这样做:
"\u00" + myInt.ToString()
因为第一个文字无效。有没有简单的方法可以得到这个结果?
(如果您好奇的话,这是为了与硬件设备集成,供应商有时会将整数值表示为十六进制。例如,我需要将今天的日期发送到设备 "\u0015\u0010\u0002"
.)
字符串中的 Unicode 文字在编译时解析,这就是为什么 "\u00" + myInt.ToString()
不起作用(ToString()
和连接在运行时评估)。
您可以将 int 转换为 char:
int unicodeCodePoint = 15; // or 21
char c = (char)unicodeCodePoint;
鉴于您想要 Unicode 代码点 21,而不是 15,您绝对应该以字符串“15”开头。如果您尝试以 15 作为 int
开头,您会发现您无法用涉及 A-F 的十六进制表示来表达任何内容...
因此,给定“15”,将其解析为十六进制的最简单方法可能是:
string text = "15";
int codePoint = Convert.ToInt32(text, 16);
之后,您只需转换为 char
:
string text = "15";
int codePoint = Convert.ToInt32(text, 16);
char character = (char) codePoint;
请注意,这仅适用于基本多语言平面 (BMP) 中的代码点 - 即 U+0000 到 U+FFFF。如果您需要处理超出该值的值(例如 U+1F601),那么您应该使用 char.ConvertFromUtf32
代替:
string text = "15";
int codePoint = Convert.ToInt32(text, 16);
string character = char.ConvertFromUtf32(codePoint);
我有整数 15
(或字符串 "15"
,这很简单),我需要用它来创建值:
"\u0015"
是否有某种转换可以实现这一点?我不能这样做:
"\u00" + myInt.ToString()
因为第一个文字无效。有没有简单的方法可以得到这个结果?
(如果您好奇的话,这是为了与硬件设备集成,供应商有时会将整数值表示为十六进制。例如,我需要将今天的日期发送到设备 "\u0015\u0010\u0002"
.)
字符串中的 Unicode 文字在编译时解析,这就是为什么 "\u00" + myInt.ToString()
不起作用(ToString()
和连接在运行时评估)。
您可以将 int 转换为 char:
int unicodeCodePoint = 15; // or 21
char c = (char)unicodeCodePoint;
鉴于您想要 Unicode 代码点 21,而不是 15,您绝对应该以字符串“15”开头。如果您尝试以 15 作为 int
开头,您会发现您无法用涉及 A-F 的十六进制表示来表达任何内容...
因此,给定“15”,将其解析为十六进制的最简单方法可能是:
string text = "15";
int codePoint = Convert.ToInt32(text, 16);
之后,您只需转换为 char
:
string text = "15";
int codePoint = Convert.ToInt32(text, 16);
char character = (char) codePoint;
请注意,这仅适用于基本多语言平面 (BMP) 中的代码点 - 即 U+0000 到 U+FFFF。如果您需要处理超出该值的值(例如 U+1F601),那么您应该使用 char.ConvertFromUtf32
代替:
string text = "15";
int codePoint = Convert.ToInt32(text, 16);
string character = char.ConvertFromUtf32(codePoint);