【发布时间】:2016-04-04 16:37:04
【问题描述】:
我的代码在不写入文件时严重依赖字节的速度。
在读取函数或数据点转换函数中,在将字节数组转换为 ASCII 字符串后,我从字节数组中获得了几个不必要的“空格”字符,即使将它们设置为 NULL。这会产生很多不需要的空白。以下是当前代码的部分内容:
//Within Read Function
var charBuf = Enumerable.Repeat<byte>(0, 1024).ToArray(); //Set byte array to null
int ret = Read(ConnectionID, charBuf, 1024); //Call to a custom dll to retrieve data
if (0 <= ret)
{
return charBuf;
}
//Datapoint message is set as an empty byte that gets added to the list Datapoint
//The following converts the datapoint to a string depending on its input
var message = Encoding.ASCII.GetString(dataPoint.Message);
if (String.IsNullOrEmpty(message))
{
message = "ReadError";
}
有没有什么方法可以消除这些假定的字符而无需太多代码,或者我的转换是否有错误?任何修复都将不胜感激。
【问题讨论】:
-
dll中的
Read()调用需要什么数据格式?char *或wchar_t *或其他?您可以在阅读后对charBuf的内容进行十六进制转储吗?我不认为Encoding.ASCII转换有问题,如果那个Message的数据格式真的是ASCII。 -
这个dll不是我的,所以不知道。该 dll 来自一个不再存在并且没有很好地记录的来源。但是,推荐的默认 C# 代码将 charBuf 作为 char 数组。出于速度原因,我只是将其更改为字节。无论是字符数组还是字节,都会发生错误。
-
也许应该是
Encoding.Default(即它是 ANSI 文本)。几乎没有 Windows 程序真正使用 ASCII 文本。 -
水晶球说您使用了错误的 GetString() 重载。你肯定会更喜欢 GetString(charbuf, 0, ret)。
-
另外,声明 1024 字节数组的更常用方法是
var charBuf = new byte[1024];
标签: c# type-conversion ascii whitespace