在不同平台上通过管道传输数据的最佳且安全的方法

发布于 2024-12-03 10:46:58 字数 274 浏览 1 评论 0原文

目前我面临一个问题,我正在通过管道从 x64 arch 传递缓冲区对象到 x86 arch。该对象还包含一些指针值,在 x64 中为 8 个字节,而在 x86 上相同的指针大小为 4 个字节。现在,当我通过管道传输对象时,它的大小比 x86 平台对同一对象的预期要大一些(因为这里的指针大小较小)。我可以从这个论坛的类似帖子中了解到,我可能需要使用序列化,但我不知道如何使用,因为我以前从未使用过序列化。序列化能解决这个问题吗?我正在使用 C++ 和 GCC 编译器。我希望该产品能够在所有架构(ia64、x64 或 x86)上运行。

Currently I am facing an issue where i am passing a buffer object over a pipe from x64 arch to x86 arch. The object also contains some pointer values, which is 8 bytes in x64 which the same pointer size on x86 is 4 bytes. Now when i am transmitting the object over pipe then size of it is bit more than what x86 platform was expecting for the same object (because pointer size in here is less). What i could understood from similar post in this forum that i might need to use serialization but i do not know how as i have never used serialization before. Will serialization will solve this problem? I am using C++ with GCC compiler. I want the product would work on all arch (ia64, x64 or x86).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

醉生梦死 2024-12-10 10:46:58

指针是指向本地运行程序*内的内存位置的地址。将其发送到另一个程序是没有用的,对于在另一台机器上运行的程序更无用,如果另一台机器的体系结构不同则更无用。

在上下文中使用序列化意味着发送指针所指向内容的内容,而不是发送无意义的指针本身。

要实现跨架构的数据发送,更容易的是使用文本进行数据传输。大多数(如果不是全部)广泛使用的跨体系结构协议都使用文本:HTTP、IMAP、IRC ...

*:我使用 program 而不是 process

A pointer is an address to a memory location within your local running program*. It is useless to send it to another program, more useless to a program running on another machine, even more useless if the architecture of the other machine is different.

Using serialization in your context means sending the content of what is pointed to by the pointer instead of sending the meaningless pointer itself.

To achieve cross-architecture data sending, the easier is to use text for data transfers. Most if not all of widely used cross-architecture protocols use text: HTTP, IMAP, IRC ...

*: I use program instead of process.

旧城烟雨 2024-12-10 10:46:58

Boost 序列化专门设计用于:

在这里,我们使用术语“序列化”来表示可逆的
将任意一组 C++ 数据结构解构为
字节序列。这样的系统可以用来重构一个
另一个程序上下文中的等效结构。取决于
上下文,这可能用于实现对象持久化、远程
参数传递或其他设施。在这个系统中我们使用术语
“归档”指的是该字节流的具体呈现。
这可以是二进制数据、文本数据、XML 或其他一些文件
由该库的用户创建。

顺便说一下,使用 POD 结构,并确保使用特定类型的数据类型。为此,请使用预定义类型(例如,请查看此处

boost serialization is designed specifically to :

Here, we use the term "serialization" to mean the reversible
deconstruction of an arbitrary set of C++ data structures to a
sequence of bytes. Such a system can be used to reconstitute an
equivalent structure in another program context. Depending on the
context, this might used implement object persistence, remote
parameter passing or other facility. In this system we use the term
"archive" to refer to a specific rendering of this stream of bytes.
This could be a file of binary data, text data, XML, or some other
created by the user of this library.

By the way, use POD structures, and make sure to have use data types of a specific type. For that use predefined types (for example, take a look here)

昨迟人 2024-12-10 10:46:58

http://code.google.com/apis/protocolbuffers/

协议缓冲区是 Google 的语言中立、平台中立、可扩展的序列化结构化数据机制 - 类似于 XML,但更小、更快、更简单。您只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码,使用各种语言(Java、C++ 或 Python)轻松地在各种数据流中写入和读取结构化数据。

在 x86/64、arm 上为我工作

http://code.google.com/apis/protocolbuffers/

Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages – Java, C++, or Python.

Worked for me on x86/64, arm

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文