C++uint8_t转换为无符号长整型
C++ convert uint8_t to unsigned long
>我正在使用这样的结构使用 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。
您可以使用位和移位运算来组合这两个值:
tx_buf = tx[ 0 ] |( tx[ 1 ] <<8 );
它是便携式的,很容易理解。
您可以使用:
uint8_t tx[] = {0xAC, 0xDC};
unsigned long* longDataPtr = reinterpret_cast<unsigned long*>(tx);
现在longDataPtr
是指向结果的指针。
但是,要使用reinterpret_cast
您需要在缓冲区中包含sizeof(unsigned long)
元素,否则结果将被篡改。
相关文章:
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 将 BYTE 数组转换为无符号长整型
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- 模板参数可以既是 int 又可以是无符号长整型吗?
- 用有符号长整型结果减去无符号长整型
- iOS - 隐式转换将整数精度"size_t"(也称为"无符号长整型")丢失为&
- 将字符串存储在无符号长整型的向量中
- 如果我尝试在 c++ 中将大于 pow(2,64)-1 的值分配给无符号长整型怎么办?
- C++:将无符号长整型长整型转换为无符号长整型
- 无法将DWORD转换为无符号长整型
- 无符号长整型VS无符号长型整型
- 如何将SHA1转换为无符号长整型数组[5]
- 如何将 3 个整数连接成无符号长整型
- 将无符号长整整除以无符号长整型的最安全方法
- 将 Const char * 转换为无符号长整型 - strtoul
- 大于无符号长整型的整数类型,以及库