我需要将数字作为字符串处理。
我的值为0x28
,这是'('
的ascii代码。
我需要将其分配给字符串。
以下几行是这样做的。
char c = (char)0x28;
string s = c.ToString();
string s2 = ((char)0x28).ToString();
我的usecase是一个只接受字符串的函数。 我的电话最终看起来很混乱:
someCall( ((char)0x28).ToString() );
有没有一种方法可以简化这一点并使其更具可读性而无需编写'('
?
代码中的十六进制数字总是与一个在其名称中包含该十六进制值的变量配对,因此"翻译"它会破坏那种可见的联系。
编辑:
使用此元组初始化元组列表,其中第一个项目的名称中包含字符,第二个项目来自具有该字符的调用。
下面的答案之一正是我正在寻找的,所以我现在把它合并到这里。
{ existingStaticVar0x28, someCall("\u0028") }
读者现在可以本能地看到item1和item2之间的连接,并且当它被重构时不太可能遇到陷阱。
答案 0 :(得分:6)
您可以使用Unicode character escape sequence代替十六进制来避免投射:
string s2 = '\u28'.ToString();
或
someCall("\u28");
答案 1 :(得分:2)
假设您没有固定输入,那么您可以编写extension method
namespace MyExtensions
{
public static class MyStringExtensions
{
public static string ConvertFromHex(this string hexData)
{
int c = Convert.ToInt32(hexCode, 16);
return new string(new char[] {(char)c});
}
}
}
现在你可以在你的代码中调用它了
string hexNumber = "0x28"; // or whatever hexcode you need to convert
string result = hexNumber.ConvertFromHex();
应在上述转换中添加一些错误处理。