将任何数据类型序列化为向量 - 使用reinterpret_cast?

2024-03-04

我在搜索中没有找到任何直接相关的内容,所以如果这是重复的,请原谅。

我想要做的是通过网络连接序列化数据。我的方法是将我需要传输的所有内容转换为std::vector< uint8_t >并在接收端将数据解包到适当的变量中。我的方法如下:

template <typename T>
inline void pack (std::vector< uint8_t >& dst, T& data) {
    uint8_t * src = static_cast < uint8_t* >(static_cast < void * >(&data));
    dst.insert (dst.end (), src, src + sizeof (T));
}   

template <typename T>
inline void unpack (vector <uint8_t >& src, int index, T& data) {
    copy (&src[index], &src[index + sizeof (T)], &data);
}

我正在使用它

vector< uint8_t > buffer;
uint32_t foo = 103, bar = 443;
pack (buff, foo);
pack (buff, bar);

// And on the receive side
uint32_t a = 0, b = 0;
size_t offset = 0;
unpack (buffer, offset, a);
offset += sizeof (a);
unpack (buffer, offset, b);

我关心的是

uint8_t * src = static_cast < uint8_t* >(static_cast < void * >(&data));

行(我理解它的作用与reinterpret_cast)。有没有更好的方法可以在不使用双重演员的情况下完成此任务?

我天真的方法是只使用static_cast< uint8_t* >(&data)失败了。我有过去被告知 https://stackoverflow.com/questions/2158928/inherit-from-two-polymorphic-classes that reinterpret_cast不好。因此,如果可能的话,我想避免它(或我当前拥有的构造)。

当然,总有uint8_t * src = (uint8_t *)(&data).

建议?


我的建议是忽略所有告诉你这一点的人reinterpret_cast不好。他们告诉您这很糟糕,因为采用一种类型的内存映射并假装它是另一种类型通常不是一个好的做法。但在这种情况下,这正是您想要做的,因为您的整个目的是将内存映射作为一系列字节传输。

它比使用双static_cast,因为它充分详细说明了您正在采用一种类型并故意假装它是其他类型的事实。这种情况正是reinterpret_cast是为了,避免将它与空指针中介一起使用只会模糊你的含义,而没有任何好处。

另外,我相信您已经意识到这一点,但请注意 T 中的指针。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将任何数据类型序列化为向量 - 使用reinterpret_cast? 的相关文章

  • C# 从带引号的字符串中删除分隔符

    我正在编写一个程序 必须从文本文件中带引号的字符串中删除分隔符 例如 Hello my name is world 必须 Hello my name is world 起初这听起来很简单 我认为是这样 但是您需要检测引号何时开始 何时结束
  • 将 LUIS 与 FormFlow 集成

    我创建了一个机器人 里面有一个 FormFlow 现在 如果您输入 我想启动产品 LUIS 将告诉它必须转到哪个对话框 internal static IDialog
  • 如何从 C# 可移植类库 (PCL) 添加对 F# 可移植库的引用

    我有一个项目 其中包含两个 F 项目和一个 C 项目 我想在其中编写一些 XUnit 测试 FS PL F 3 1 3 3 1 0 可移植库 FS PL Legacy F 31 2 3 5 1 可移植库 旧版 测试 C NET 4 5 Wi
  • C# 3 新功能帖子(与 .Net 3.5 功能无关)[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Net F
  • 使用 C# 使用证书进行 SSL 客户端身份验证

    我需要创建一个 C 应用程序 该应用程序必须使用 SSL 向服务器发送 API 请求 我需要创建客户端身份验证 我已经拥有服务器 CA 证书 客户端证书 cer 客户端私钥 pem 和密码 我找不到有关如何创建客户端连接的示例 有人可以建议
  • PostgreSQL:42883 运算符不存在:没有时区的时间戳 = 文本

    我正在使用 Npgsql 3 0 3 0 和 PetaPoco 最新版本 当我运行这个命令时 var dateCreated DateTime Now just an example var sql new Sql WHERE date c
  • 如何在 VS 2013 的立即窗口中执行 LINQ 和/或 foreach?

    在调试过程中探测当前状态时 立即窗口是非常有用的工具 我了解到 通过使用问号 人们可以在那里做更多的事情 如图所示在这篇文章中 https stackoverflow com questions 32934635 execute metho
  • 如何使用 VB.NET 或 C#.NET 代码从 yahoo 邮件 ID 发送邮件

    我想从我的 yahoomail Id 发送邮件 如何使用 VB NET 或 C NET 代码从 yahoo mail Id 发送邮件 需要善意的帮助 提前谢谢 西瓦库马尔 以下是一些制作基本 html 电子邮件消息的示例 http help
  • 要实现 XML 可序列化,从 ICollection 继承的类型必须具有 Add 的实现

    我有来自现有项目的 CSLA 1 x 框架 对象 我试图在新的 Net 4 0 项目中使用它 这些对象正在生产中使用 如果没有 2 组对象 我确实无法将它们转换为 2 x 或 EF 在我的 c webservice 中 当我尝试运行它时 我
  • 隐藏树视图列表中的节点。在 C# 中

    我正在使用 VS 2005 C 正在处理一个未完成的 WinForm 我已将 XML 解析为树视图列表 但遇到了一些问题 我想知道是否有一种方法可以隐藏 过滤 删除名称中包含 this text 的某个节点 而不必依赖文本框 这就是我对这个
  • “应用程序配置”文件中的最大键/值长度

    允许的最大长度是多少MyKey and MyValue在配置文件中
  • 数据绑定问题,请解释

    public partial class Form1 Form MyClass myClass new MyClass one two public Form1 InitializeComponent textBox1 DataBindin
  • 当 MSB 位等于 0 时如何以十六进制格式打印它们

    我需要使用打印变量HEX格式 问题是当我的变量很小时 MSB 等于 0 因此不会打印它们 ex uint16 t var 10 0x000A h gt 我需要打印 000A 但无论我做什么它总是打印 A 我怎样才能让它发挥作用 您可以添加前
  • 了解C/C++中函数调用的堆栈框架? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我也是 C C 和汇编语言的新手 这
  • allocator.construct 循环是否等于 std::uninitialized_copy?

    在此背景下T是某种类型并且allocator是该类型的分配器对象 默认情况下是std allocator
  • 我如何错误地使用 C 中的 round() 函数?

    我从中得到了意想不到的结果round and roundf 中的函数math h图书馆 这是示例代码 include
  • cygwin $'\r':命令未找到错误

    我稍微修改了一个项目 在调试下它运行得很好 当我尝试在不调试的情况下构建它时 它显示错误 无法修复它 make Making all in third party make 1 Entering directory cygdrive c U
  • 如何防止用户生成的 Sql 查询上的 Sql 注入

    我有一个项目 私有的 ASP net 网站 受 https 密码保护 其中要求之一是用户能够输入直接查询数据库的 Sql 查询 我需要能够允许这些查询 同时防止它们对数据库本身造成损坏 以及访问或更新它们不应该访问 更新的数据 我制定了以下
  • 使用抽象类作为模板类型

    我对c 还是很陌生 来自java 我有一个 stl 类型列表Actor When Actor仅包含 真实 方法就没有问题 我现在想将这个类扩展到几个类 并且需要将一些方法更改为抽象的 因为它们不再具有具体的意义 正如我 从文档中 预期的那样
  • qt 如何知道按钮被点击?

    我正在尝试编写一个程序 用声音进行一些操作 我的问题是我有 3 个播放按钮和 3 个标签 我希望无论我单击 播放 按钮 都应该播放按钮附近标签中名称的声音 我有一个没有任何参数的播放插槽 那么 如何分别连接到每个播放按钮和每个标签呢 实际上

随机推荐

  • 根据绘图选择过滤 Bokeh 数据表

    我正在尝试根据绘图选择按数据表进行过滤 我陷入了合并 cb obj 的困境 我生成一个散点图 我想在其中选择任意点 选择后 我想用所选 y 或 x 值大于第二个数据源 即 DataTable 的数据源 中的值的值填充表 from rando
  • 如何防止 SIGPIPE(或正确处理它们)

    我有一个小型服务器程序 它接受 TCP 或本地 UNIX 套接字上的连接 读取一个简单的命令并 取决于命令 发送回复 问题是客户可能对答案不感兴趣 有时会提前退出 所以写入该套接字将导致SIGPIPE并使我的服务器崩溃 防止这里崩溃的最佳做
  • 还有其他方法让 Laravel 重新加载环境变量吗?

    我在知名主机上有一个共享托管帐户 我的 Laravel 网站已上传并大部分正常运行 但我必须改变环境 现在我无法让 Laravel 看到更改 我知道这是常见问题 我尝试运行 artisan 命令来清除配置和缓存 php artisan co
  • 在 Opencart 管理“订单信息”页面上添加自定义字段

    我想在 opencart 管理订单页面上添加自定义字段 比较值 如 ifoc order order id oc custom table order id然后显示oc custom table comment在管理订单列表上 在管理订单信
  • 用Java实现Matlab的rgb2gray

    我正在尝试实现Matlab的rgb2gray在Java中根据http www mathworks com help toolbox images ref rgb2gray html http www mathworks com help t
  • Dropbox直接从浏览器上传文件

    我正在尝试将文件直接上传到 dropbox 从浏览器 网络应用程序 代码 API 上的 uploadFile 函数需要上传服务器上可用的文件 这给我带来了麻烦 因为我不想要任何文件要上传到我的服务器并从那里上传到保管箱 f fopen te
  • 所有特征必须在 [0, 9] 或 [-10, 0] 范围内

    我有以下代码 df load data pd set option display max columns None df dtypes intBillID object chBillChargeCode object chBillNo o
  • 如何管理非托管 Eclipse 格式化配置文件?

    我们的项目有一个 非托管配置文件 和节省时间的自动格式化 我希望能够修改此非托管配置文件的设置 并能够将它们重新签入版本控制 Eclipse 的帮助文档非常没有帮助 您不允许更改这样的配置文件 只有配置文件的创建者 管理员 可以更改它 我不
  • 在 Erlang 中编写和编译自定义行为

    我试图在 Erlang 中编写并编译自定义行为 我找不到任何关于如何编译此行为的明确文档 module bla export start link 0 behaviour info 1 behaviour info callbacks gt
  • 如何调试grpc调用?

    我试图找出为什么我的grpc http grpc iocall 不起作用 但我不知道如何打开调试 因此我可以看到通过 grpc 连接发送和接收的数据 如何打开 grpc 调用的调试 您可以设置GRPC TRACE环境变量为all让 grpc
  • 带有阻塞代码的 setTimeout 行为

    这是我的测试代码 小提琴here http jsfiddle net Xvh55 console log Before wait setTimeout function console log Yo 1000 var start Date
  • JavaScript 和多语言最佳实践

    使用 DOM 操作 javascript 的多语言网站的最佳实践是什么 我使用 JavaScript 构建了网站的一些动态部分 我的第一个想法是使用一个包含文本字符串和语言代码的数组作为索引 这是一个好主意吗 当我之前构建多语言网站时 不是
  • 访问令牌没有 openid 范围

    我正在做 sso 示例 travelocity com 示例 当我尝试使用此命令通过 oauth 访问令牌访问用户信息时 卷曲 k H 授权 承载b68ba941c9da3d2644d8a63154d28 https localhost 9
  • Java日期排序方法?

    我有一个日期字符串数组 格式为 2010 05 04 11 26 46 0530 如何检查数组中的特定日期是否 gt 今天 thanks DateFormat df new SimpleDateFormat yyyy MM dd HH mm
  • 如何重定向消息以在 Django 模板中显示它们?

    我有一个验证并保存表单的视图 保存表单后 我想重定向回 l ist object 视图 并显示成功消息 客户 xyz 的表单已成功更新 HttpResponseRedirect 似乎不起作用 因为它只有一个 url 参数 无法传递字典 我尝
  • 忽略对角线的 Numpy 数组的最小值

    我必须找到忽略对角线元素的 numpy 数组的最大值 np amax 提供了忽略特定轴来查找它的方法 我怎样才能实现相同的忽略所有对角线元素 你可以使用面膜 mask np ones a shape dtype bool np fill d
  • 在 MAC 上使用 Xamarin Studio 运行 Selenium 测试

    我正在尝试运行我创建的测试Visual Studio 2010 using Selenium WebDriver 在使用 Xamarin Studio 的 MAC 中 我有chromedriver exe作为 EmbeddedResourc
  • 它不是将数据插入数据库

    我想将数据插入到Image Question桌子 但它不会执行插入操作Image Question Table 我收到两个错误 注意 未定义的偏移量 0 in 第 305 行 注意 未定义的偏移量 第 305 行上的 3 in 这是您可以使
  • 如何解决“无法解析某些模块 oracledb”?

    我已经设置了一个流星项目并导入了oracledb节点包 https github com oracle node oracledb 但是在通过启动项目后meteor run我收到控制台构建错误 说明Unable to resolve som
  • 将任何数据类型序列化为向量 - 使用reinterpret_cast?

    我在搜索中没有找到任何直接相关的内容 所以如果这是重复的 请原谅 我想要做的是通过网络连接序列化数据 我的方法是将我需要传输的所有内容转换为std vector lt uint8 t gt 并在接收端将数据解包到适当的变量中 我的方法如下