问题描述
||
我有一个Of0ѭ的SizeOfData变量,它返回:
byte[0] == 0
byte[1] == 0
byte[2] == 0
byte[3] == 0
当我执行Encoding.ASCII.GetString(SizeOfData)
时,字符串变量的长度为4,而String.IsNullOrEmpty()
返回false,但是当我在Visual Studio中查看字符串时,其中没有任何内容。
我如何确定它是否包含所有\\ 0 \\ 0 \\ 0 \\ 0,然后是否X否则为Y?
解决方法
一点linq魔术
if (bytes.All(b => b == 0))
或稍微好一点
if (bytes.Any(b => b != 0))
, 当我在Visual Studio中查看字符串时,其中没有任何内容
我假设的意思是,当您将鼠标悬停在调试器中的字符串上(或添加手表,检查本地对象或以其他方式查看字符串的可视表示形式)时,它似乎是空的。这是因为“ 6”与其他一些字符一样是不可打印的字符。这些字符在那里,但不会引起视觉效果。
如果要确定字节数组是否仅为零,则很简单:
(请注意,您上面的数组名称无效,因此我将其命名为data
)
if(data.Add(b => b == 0))
{
// is only null characters
}
但是,您似乎想要更强大的功能,并且可以在字符串上使用。您可以使用简单的RegEx替换不可打印的Unicode字符的范围(我知道您的原始字符串为ASCII,但是一旦解析它,它就会以UTF-16的形式存储在内部):
yourString = Regex.Replace(yourString,\"[\\x00-\\x1F]\",\"\");
此时,“ 10”应返回“ 11”。
,在转换为字符串之前,您可以:
bool isNulls = SizeOfData.All(x => x == 0);
,如果可以更早地处理它,则可以检查字节数组:
if(SizeOfData.Any(b => b != 0))
// do something
else
// do something else