【问题标题】:Pass binary data from C to C# through the console通过控制台将二进制数据从 C 传递到 C#
【发布时间】:2012-03-05 11:56:27
【问题描述】:

我有两个应用程序,一个用 C 编写,另一个用 C# 编写,它们通过控制台字符串消息进行通信。他们都等到对方发送字符串消息。

现在我希望 C 应用程序在某个时刻通过相同的控制台 I/O“通道”发送二进制格式的图像,并且 C# 应用程序接收它并将其用作要显示的图像。我知道这是可能的,请参阅:C/C++: is it possible to pass binary data through the console?

我可以访问这两个应用程序的源代码。我知道 C 应用程序代码将图像写入磁盘的位置。 C#应用通过这段代码获取C应用输出:

process.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); //void
p_OutputDataReceived(object sender, DataReceivedEventArgs e) //e.Data.

如何编写二进制图像传输的 C 和 C# 部分?谢谢。

【问题讨论】:

  • @C.Evenhuis 我想在 C 和 C# 方面实现上述数据传输,你能发布一些示例代码吗?
  • 我没有,通常在这里发帖的人开发自己的软件并在遇到特定问题或疑问时提出问题。
  • @C.Evenhuis 我自己开发了我的应用程序,这是我遇到的具体问题。如果您没有代码示例,请至少提供一些提示。将不胜感激。
  • 您链接到的问题中的答案包含将stdin 设置为二进制模式的代码 - 并提到您也可以为stdout 执行此操作。您已经提到 C# 应用程序如何接收数据。下一步将写入stdout 并在C# 中的p_OutputDataReceived 处理程序中放置一个断点,对吧?
  • 如果你不需要使用控制台,除了stdin/stdout还有其他的IPC方法,比如socket或者内存映射文件。

标签: c# c image console binary-data


【解决方案1】:

如果您的问题是如何传输这些数据,那么您的问题的真正简短答案是base64。它是专门为此目的而制作的,并且具有适用于 C 和 C# 的现成库(只需查找例如“C# base64”)。

它几乎与原始二进制编码一样有效(就传输的数据而言)。

【讨论】:

  • Convert.FromBase64String 方法在 C# 方面很有用,但您能否发布一些不需要包含库的良好 C 编码器代码的链接。这个 SO 线程好吗? bit.ly/u1K2X0
  • 是的,它为您提供了一些不错的选择。根据许可证,您可以只复制处理编码的部分而不包括整个库(例如来自 glib 或 GNU coreutils 源)。
  • 我尝试了这种 base64 编码,但速度非常慢。当您说它在传输数据方面几乎与原始二进制文件一样高效时,您的意思是说性能很差吗?还是控制台 I/O 通道慢?
  • 我的意思是传输的数据以传输的比特数表示同一事物。关于速度,它实际上是在电子邮件附件中使用的,也可以是相当大的文件,它在那里工作......但这取决于应用程序类型。如果您尝试将其用作 IPC 通道来传输千兆字节的信息,那么这不是您想要的。
猜你喜欢
  • 2012-03-22
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
相关资源
最近更新 更多