c# - 在我的 C# 应用程序中。我正在将远程机器的 CNC 程序读入字节缓冲区。如何将这个字节缓冲区逐行读取到字符串数组中?

标签 c# readline bytebuffer

我可以使用第三方 dll 将远程机器的完整 CNC 程序读取到字节缓冲区。之后,我必须逐行读取字节缓冲区并将其传输到字符串数组。(我不想将程序写入文件,我想在我的 Blazor 页面中逐行显示程序)

我编写了以下代码,将完整的缓冲区读入一个字符串。但我不能把它分成几行。我怎样才能做到这一点? 我通常应该阅读 CNC 程序,例如:

G0 G603

AAA:

Z=IC(-50)

Z=IC(50)

GOTOB AAA

M30

但是我的代码将 CNC 程序作为一行读取。

G0 G603 AAA:Z=IC(-50) Z=IC(50) GOTOB AAA M30

public Int32 doNCK_CopyFromNCAlloc(Int32 connnr, Int32 timeout, string path, out string  CNC_File_Out)
    {
        Int32 result = 0;
        Byte[] buff = null;
        Int32 bufflen = 0;
        String filename = path;
        CNC_File_Out = "";
        result = AGL4.NCK_CopyFromNCAlloc(connnr, filename, out buff, out bufflen, timeout);

     if (result == 0)
        {                
            b = buff;             
            parameter_value_string = BitConverter.ToString(b, 0);
            parameter_value_string_UTF8 = System.Text.Encoding.UTF8.GetString(b);
            CNC_File_Out= parameter_value_string_UTF8.Replace("\0", string.Empty);
        }            
        Return_Read_CNC_File = result;
        return result;
    }

Update-1(字节输出如下)

47-30-20-47-36-30-33-0D-0A-41-41-41-3A-0D-0A-5A-3D-49-43-28-2D-35-30-29 -0D-0A-5A-3D-49-43-28-35-30-29-0D-0A-47-4F-54-4F-42-20-41-41-41-0D-0A-4D-33 -30-0D-0A-0D-0A

最佳答案

只需读取字节即可得到所需的字符串,包括 Windows 系统换行符:

CNC_File_Out = Encoding.UTF8.GetString(buff, 0, buff.length);

不需要 BitConverter.ToString() 并替换空终止符。

关于c# - 在我的 C# 应用程序中。我正在将远程机器的 CNC 程序读入字节缓冲区。如何将这个字节缓冲区逐行读取到字符串数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73259537/

相关文章:

c# - 将两个二维数组混合成1个二维数组

ruby - 什么会给我类似 ruby​​ readline 的默认值?

java - 为什么 ByteBuffer 不为 putDouble 和 getDouble 保留索引?

java - Javolution ByteBuffer 问题

c# - 使用任务索引超出范围异常

c# - 为什么这个 C# 正则表达式会使我的程序崩溃?

perl - 将 Term::ReadLine 与 Unicode 输入结合使用

python - 在 python 中将字符串附加到 .txt 文件的每一行?

android - 如何在 Android 的 MediaCodec 上下文中使用 ByteBuffer

c# - 从 NSDictionary 中获取浮点值