【问题标题】:Byte to ASCII conversion Generating Unneeded/Undesired Spacing Characters字节到 ASCII 转换生成不需要/不需要的间距字符
【发布时间】: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


【解决方案1】:

为了防止修改代码的读取函数而不是更改数据类型以优化代码的速度,我决定通过在读取后完成字符串简化过程来处理空白空间问题函数不再使用,所有数据都被写入文件:

            var message = Encoding.Default.GetString(dataPoint.Message);
            int messageSize=0;
            byte nullByte = 0x00;
            for (int k=0; k < dataPoint.Message.Count(); k++)
            {
                if (dataPoint.Message.ElementAt(k).Equals(nullByte))
                {
                    messageSize = k+1;
                    break;
                }
                else
                {
                    continue;
                }
            }
            message = message.Substring(0, messageSize);

然后,对于每行的每条消息,消息将逐行附加到文本文件中。

此方法可确保尽管定义为 1024 个空空格,但仅考虑读取函数接收的数据(接收的数据不发送空格)。

【讨论】:

    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多