有没有办法,我可以避免字符串中的'\'字符?
//bit array
BitArray b1 = new BitArray(Encoding.ASCII.GetBytes("10101010"));
BitArray b2 = new BitArray(Encoding.ASCII.GetBytes("10101010"));
//Say i perform XOR operation on this
b1 = b1.Xor(b2);
//After the XOR oper the b1 var holds the result
//but i want the result to be displayed as 00000000
//So i convert the bitarray to a byte[] and then to string
byte[] bResult = ToByteArray(b1);
strOutput = Encoding.ASCII.GetString(bResult);
The string strOutput is = "\0\0\0\0\0\0\0\0"
But the desired output is 00000000
其中ToByteArray可以是一个简单的方法,如
public static byte[] ToByteArray(BitArray bits)
{
byte[] ret = new byte[bits.Length / 8];
bits.CopyTo(ret, 0);
return ret;
}
备选方案1 :我可以使用正则表达式或string.replace忽略'\'字符
但还有其他更好的方法来处理这种情况吗?
答案 0 :(得分:1)
string strOutput = "\0\0\0\0\0\0\0\0"
string strOutput = Encoding.ASCII.GetString(strOutput).Replace("\\\"","");
答案 1 :(得分:1)
你不能只操纵二进制行内的值。相反,正如你给出了替代方法,使用正则表达式或字符串替换函数来获取指定的结果集。
例如: 通过为代码调用额外的方法
byte[] bResult = ToByteArray(b1);
strOutput = Encoding.ASCII.GetString(bResult).Replace("\\\"","");
修改强>
我相信你的情况通常我的答案会奏效, 的 BUT 强>
0 '\0'
也是ASCII字符集(仅在0中),这意味着你给了相同的字符串 \ 0 \ 0 \ 0 \ 0 .. 替换为反斜杠字符(\)
CALL Replace("\0","0")
答案 2 :(得分:0)
如果您的问题是“有没有更好的方法来删除反斜杠而不是使用string.replace
我会说答案通常是否定的,但这取决于您的目标。
你在寻找原始速度吗?你认为编译正则表达式并应用它的开销太慢了吗?正则表达式引擎通常都经过相当好的优化,如果使用它们,通常会提供良好的性能。您可以查看各种库中“替换”函数的源代码,以了解专业人员如何做事。
但是我认为你的问题是你是否可以编写自己的字符串处理函数比正则表达式替换更快,因为你知道你可以分配一个最大大小的字符串缓冲区,遍历输入字符串并复制到每个输出字符除了反斜杠。当然这是一个简单的循环,也许编译器会将它优化为比正则表达式替换更快的东西,但谁知道呢?通常这些程序员引发的优化不值得麻烦(代码更长且容易出错)。至少,如果你正在追求的话,做一些分析。
答案 3 :(得分:0)
怎么样?
StringBuilder sb = new StringBuilder();
foreach( byte b in bResult )
{
sb.Append( String.Format("{0:00000000}\n", b ) ;
}
strOutput = sb.ToString();
我知道,不同的东西,但我相信这更像你想要的!因为在某些时候你必须从二进制转换为char!如果没有,你将不知道它是二进制零值还是char 0的ascii表示!
HTH
马里奥