C++ 将 uint8_t 转换为 unsigned long

标签 c++ arrays performance casting

我正在使用这样的结构通过 spidev 传输一些数据

struct spi_ioc_transfer tr = {
    .tx_buf = (unsigned long)tx,  // transferred 
    .rx_buf = (unsigned long)rx,  // received
    .len = ARRAY_SIZE(tx),
    .delay_usecs = delay,
    .speed_hz = speed,
    .bits_per_word = bits,
};

我要发送的数据是uint8_t tx[] = {0xAC, 0xDC} 所以我像这样转换数组: msg.tx_buf = (unsigned long)tx;

但这不利于可移植性,而且它依赖于字节序。 有没有更好、更快的方法来做到这一点? 我还需要比较 msg.tx_buf 和 msg.rx_buf 的值以确保该值写入正确。

谢谢

最佳答案

如果您的“spidev”期望发送 32 位字(bits 为 32),那么您需要重新排列内存中的数据以正确布局。

你需要做:

const uint32_t tx32[] = { tx[0], tx[1] };

然后将.tx_buf值设置为tx32,假设它想要发送数据的地址。请记住确保 .len 正确设置为 2。

关于C++ 将 uint8_t 转换为 unsigned long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18654013/

相关文章:

c - 将格式化输出发送到 C 中的字符数组元素

javascript - 运行函数几次后未定义索引

javascript - 在 JavaScript 和 Node.js 中向 String 类添加函数会对性能产生什么影响?

c++ - 如何为 Microsoft Excel 创建过滤器?

c# - 修改正在运行的可执行文件的资源内容

c++ - 如何在 OS X 上安装 gprof

java - 在Android中安排JobIntentService

c++ - 模板特化行为示例

java - 如何将对象的一个​​元素转换为实例数组?

java - 性能:Java 与数据库