Tag: 二进制数据

通过控制台将二进制数据从C传递到C#

我有两个应用程序,一个用C语言编写,另一个用C#编写,它通过控制台字符串消息进行通信。 它们都等到另一个发送字符串消息。 现在我希望在某个时刻,C应用程序通过相同的控制台I / O“通道”以二进制格式发送图像,并且C#应用程序接收它并将其用作要显示的图像。 我知道这是可能的,请参阅: C / C ++:是否可以通过控制台传递二进制数据? 。 我可以访问这两个应用程序的源代码。 我知道C应用程序代码将映像写入磁盘的位置。 C#应用程序通过以下代码获取C应用程序输出: process.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); //void p_OutputDataReceived(object sender, DataReceivedEventArgs e) //e.Data. 如何编写二进制图像传输的C和C#部分? 谢谢。

字节在C中签名int

我有一个二进制值存储在C中的char中,我希望将此字节转换为C中的signed int。目前我有这样的事情: char a = 0xff; int b = a; printf(“value of b: %d\n”, b); 标准输出的结果为“255”,所需的输出为“-1”。

LibXML2中有“二进制转储”或“获取二进制表示”function?

我需要访问加载的XML DOM的内部二进制表示… 有一些转储函数 ,但我没有看到类似“二进制缓冲区”(只有“XML缓冲区”)。 我的最后一个目标是在一些黑盒程序之前和之后逐字节地比较同一文档 ,直接用它们的二进制(当前和缓存)表示,而不转换(到XML文本表示)……所以,这个问题, LibXML2中有一个二进制表示(内存中结构),用于将转储与当前表示进行比较? 我只需要检查当前和转储的DOM是否相同。 细节 这不是比较两个不同DOM对象的问题 ,而是更容易的事情,因为不更改ID等不需要规范表示(!),只需要访问内部表示,因为它比转换为文本快得多。 在“之前和之后”之间有一个黑盒程序 ,例如。 影响(或不影响)某些节点或属性的XSLT Identity转换 。 替代解决方案 …为LibXML2开发一个C函数,逐个节点地比较两个树,如果它们不同则返回false:在树遍历期间,如果树结构发生变化,或者某个nodeValue发生变化,算法将停止比较(返回假)。 …不是理想的,但有助于其他一些算法:如果我可以访问(在LibXML2中) 节点的总数或总长度或大小或md5或sha1 …仅用于优化频繁的情况(对于我的应用程序)比较将返回false,避免完整的比较过程。 笔记 相关问题 如何通过简单快速的比较来检查是否更改了DomDocument? C逐字节比较 libxml xmlNodePtr到原始xml字符串? 使用已解答解决方案的读者警告 问题是“在之前与后箱操作之后进行比较”,但这里有两种后箱 : 众所周知且可控的,如XSLT转换或使用已知库。 您必须知道您的黑盒子不会更改属性顺序或ID内容或非空化(或等)空格。 完全免费的,例如使用外部编辑器(例如在线编辑器更改XHTML),用户和软件可以做任何事情。 我将在“众所周知的”黑盒子的背景下使用解决方案 。 因此,我在上面“详细信息”部分的评论是有效的。 在“完全免费”后台的上下文中,您不能使用“二进制转储的比较”,因为只有规范表示(C14N)才有效进行比较。 为了通过C14N标准进行比较,只有“替代解决方案”(上面评论)是可能的。 对于alternative-1,除了其他之外,您必须在比较一组属性节点之前进行排序。 对于alternative-2( 也在这里讨论 ),生成C14N转储。 PS:当然,使用C14N标准是主观的,取决于应用 :if,p。 例如,对于您的应用,“更改属性顺序”是一个有效/重要的更改,检测它的比较是有效的(!)。