C/C++ 将signed char 打包成int

2023-11-29

我需要将四个有符号字节打包为 32 位整数类型。 这就是我想到的:

int32_t byte(int8_t c) { return (unsigned char)c; }

int pack(char c0, char c1, ...) {
  return byte(c0) | byte(c1) << 8 | ...;
}

这是一个好的解决方案吗?它是否便携(不是通信意义上的)? 有没有现成的解决方案,也许是 boost?

我最关心的问题是将负位从 char 转换为 int 时的位顺序。我不知道正确的行为应该是什么。

Thanks


char不保证签名或未签名(在 PowerPC Linux 上,char 默认为unsigned)。传播这个词!

你想要的是这样的宏:

#include <stdint.h> /* Needed for uint32_t and uint8_t */

#define PACK(c0, c1, c2, c3) \
    (((uint32_t)(uint8_t)(c0) << 24) | \
    ((uint32_t)(uint8_t)(c1) << 16) | \
    ((uint32_t)(uint8_t)(c2) << 8) | \
    ((uint32_t)(uint8_t)(c3)))

它之所以丑陋,主要是因为它不能很好地适应 C 的操作顺序。另外,反斜杠返回在那里,所以这个宏不必是一大长行。

此外,我们在转换为 uint32_t 之前转换为 uint8_t 的原因是为了防止不必要的符号扩展。

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

C/C++ 将signed char 打包成int 的相关文章

随机推荐

  • Weld 在库 jar 中找不到 CDI 生成器方法

    使用 Wildfly 8 2 0 Final 我相信它使用 Weld 2 2 我在 Maven 多模块项目中使用 2 个简单的类重现了这个问题 一个产生一个javax ws rs client Client 另一个有相同的注入点 Arqui
  • 用于创建 C/C++ 解析器/分析器的好工具 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有哪些可以快速开始解析和分析 C C 代码的好工具 特别是 我正在寻找处理 C C 预处理器和语言的开源工具 优选地 这些工具将使用 lex yacc 或 flex bison 作为
  • xcopy 文件、重命名、抑制“xxx 是否指定文件名...”消息

    这看起来很简单 也许我只是忽略了适当的旗帜 但是我如何在一个命令中将文件从一个目录复制到另一个目录并在目标目录中重命名 这是我的命令 if exist bin development whee config example if not e
  • MYSQL ORDER BY CASE 问题

    我有一个这样的数据库 id one id two timestamp one timestamp two 27 35 9 30 NULL
  • JDBC/Connectorj:了解连接池

    我想我需要更好地理解连接池的概念 我正在使用 ConnectorJ 使用 java 进行工作 并将 servlet 部署在 Apache Tomcat 服务器上 我一直在关注文档 所以我的 Tomcat context xml 如下所示
  • Rails 中 -%> 和 %> 之间的区别[重复]

    这个问题在这里已经有答案了 我已经开始了一些 Rails 教程 并注意到一些视图代码块就像 h1 h1 其他代码块就像 h1 h1 gt 和 gt 有什么区别 如果您知道一些好的语法参考 可以给我指出 这也会很有帮助 额外的破折号使得 ER
  • 如何在 Node js 中发送 POST 请求内容类型为 application/octet-stream 的文件

    我正在尝试将一些内容上传到 Facebook 的服务器 他们的官方文件指出 使用对话框中的令牌 您可以向我们的 Graph API 提交以下调用以提交您的 zip 请注意 我们正在使用视频子域 但这是故意的 因为该 URL 被配置为接收更大
  • 为什么尝试将 Grape 与 Rails 一起使用会因“未初始化常量 API”而失败?

    我希望有人解释一下为什么在 Rails 4 1 8 和 Grape 0 10 1 中会发生这种情况 这是我的 API app api root rb module API class Root lt Grape API prefix api
  • 使用 .pth 文件

    我正在尝试使模块在我没有全局写入权限的系统上可发现site packages目录 并且不改变环境 PYTHONPATH 我试图放置一个 pth文件与我正在执行的脚本位于同一目录中 但它似乎被忽略 例如 我创建了一个文件extras pth包
  • 使用 Maven 构建完整的应用程序文件夹

    大多数 Java 独立应用程序在部署到生产环境后最终都会出现在如下所示的文件夹中 myapp gt lib here lay all dependencies gt config here lay all the config files
  • 在 JavaScript 中将十六进制转换为浮点数

    我想将带有分数的以 10 为底的数字转换为以 16 为底的数字 var myno 28 5 var convno myno toString 16 alert convno 那里一切都很好 现在我想将其转换回十进制 但现在我不能写 var
  • 使用 Jetpack 的 Android 导航组件销毁/重新创建的片段

    我正在尝试实施使用 Jetpack 架构组件进行导航在我现有的应用程序中 我有一个活动应用程序 其中主要片段 ListFragment 是一个项目列表 目前 当用户点击列表项时 第二个片段将添加到堆栈中fragmentTransaction
  • 如何在 Android 中实现“Lettrine”渲染?

    我有一个小问题 如何在 Android 中实现 Lettrine 删除首字母大写字母 渲染 我的意思是 一个自动渲染 lettrine 的小部件 这是我正在寻找的示例 我很确定没有 简单的方法 可以做到这一点 但如果有的话可以帮助 欢迎所有
  • ARM BLX 指令范围(绝对)

    我有一个关于 ARM BLX 指令的问题 特别是关于 BLX RX 指令的问题 ARM手册上规定 对于BLX标签 标签应在32MB范围内 在我的代码中 我将 R0 寄存器设置为指向地址 1 我当前的地址和address1 目标地址 之间的距
  • 适用于armv7和arm64的Theos

    我正在尝试让 theos 在 OSX Mavericks 上工作 我最近购买了一部 iPhone 5s 并从那时起对其进行了越狱 现在我正在尝试让 Theos 工作 这样我就可以再次开始进行一些调整 我让它在 OSX Lion 以及 IOS
  • 将日期设置为从今天起 7 个工作日(不包括周末和公众假期)

    我尝试将日期设置为从今天算起 7 个工作日 不包括周末和英国公共假期 我首先将默认日期设置为今天的日期 todaysDate 7 天 todayPlusSevenDays 然后我计算todaysDate 和todayPlusSevenDay
  • 从 http 响应中保存角度文件

    我想知道如何以角度保存服务器响应中包含的文件 以便响应到达时自动下载文件 Edit 我有一个 http post 方法 我在响应中获取 pdf 数据 成功后 我想将响应数据保存为 pdf 文件 E g http method POST ur
  • 我需要一个快速的运行时表达式解析器

    我需要找到一个快速 轻量级的表达式解析器 理想情况下 我想向它传递一个名称 值对列表 例如变量 和一个包含要评估的表达式的字符串 我需要从中返回的只是一个真 假值 表达式的类型应遵循以下原则 varA xyz and varB 123 基本
  • 地图 V2 myLocation 蓝点回调

    我希望能够单击地图上显示的蓝点 我的位置 无论如何可以从该点击中获得回调吗 谢谢 马丁 一种可能的解决方法可能是绘制一个Marker 带有类似的图标 位于 我的位置 点的顶部 以便您可以收到相应的信息onMarkerClick 打回来 这还
  • C/C++ 将signed char 打包成int

    我需要将四个有符号字节打包为 32 位整数类型 这就是我想到的 int32 t byte int8 t c return unsigned char c int pack char c0 char c1 return byte c0 byt