所以,我想保留的两个信息short
到一个int
用于在网络上发送后(这只是一个演示,这里没有网络代码).我将每个short
数字的两个字节复制到prim
(原始)变量中.
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
int main()
{
unsigned int prim = 0;
short major = 0x0001;
short minor = 0x0000;
prim = 0;
memcpy(&prim, &major, 2);
memcpy(&prim+2,&minor, 2);
std::cout << "Prim: " << prim << std::endl;
return EXIT_SUCCESS
}
Run Code Online (Sandbox Code Playgroud)
如果我复制第major
一个,然后minor
(如上面的代码所示),我会得到正确的输出:
Prim: 1
Run Code Online (Sandbox Code Playgroud)
因为我的CPU是小端,二进制表示应该是:
10000000 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)
但是,如果我改变顺序,minor
首先意味着更major
晚,就像这样:
memcpy(&prim, &minor, 2);
memcpy(&prim+2,&major, 2);
Run Code Online (Sandbox Code Playgroud)
我得到0.
Prim: 0
Run Code Online (Sandbox Code Playgroud)
为什么?它应该是:
00000000 00000000 10000000 00000000
Run Code Online (Sandbox Code Playgroud)
等于65536.
将整数放入更大整数的更便携方式是通过移位.
uint16_t lo = 1;
uint16_t hi = 2;
uint32_t all = (hi << 16) + lo;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
168 次 |
最近记录: |