高防服务器

c++中如何获取整数各个字节


c++中如何获取整数各个字节

发布时间:2021-12-22 17:37:08 来源:高防服务器网 阅读:75 作者:小新 栏目:互联网科技

这篇文章将为大家详细讲解有关c++中如何获取整数各个字节,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

题目:获取0x12345678各个字节。

方法一:结构&联合

#include <stdio.h>

typedef unsigned int  uint32_t;
typedef unsigned char uint8_t;

union bit32_data
{
    uint32_t data;
    struct 
    {
        uint8_t byte0;
        uint8_t byte1;
        uint8_t byte2;
        uint8_t byte3;
    }byte;
};

int main(void)
{
    union bit32_data num;
    
    num.data = 0x12345678;

    printf("byte0 = 0x%xn", num.byte.byte0);
    printf("byte1 = 0x%xn", num.byte.byte1);
    printf("byte2 = 0x%xn", num.byte.byte2);
    printf("byte3 = 0x%xn", num.byte.byte3);

    return 0;
}

 

运行结果:

这种方法的缺点是:会受到大小端的影响。只有在明确大小端的情况下可稍微用一用。以上是小端模式下的运行结果。

结构&联合法不仅仅是在获取数据各个字节有用,在数据协议、数据位拆分等方面很实用,之后再做更详细的分享。

 

方法二:移位操作

#include <stdio.h>

#define GET_LOW_BYTE0(x) ((x >>  0) & 0x000000ff) /* 获取第0个字节 */
#define GET_LOW_BYTE1(x) ((x >>  8) & 0x000000ff) /* 获取第1个字节 */
#define GET_LOW_BYTE2(x) ((x >> 16) & 0x000000ff) /* 获取第2个字节 */
#define GET_LOW_BYTE3(x) ((x >> 24) & 0x000000ff) /* 获取第3个字节 */

int main(void)
{
 unsigned int a = 0x12345678;
 
 printf("byte0 = 0x%xn", GET_LOW_BYTE0(a));
 printf("byte1 = 0x%xn", GET_LOW_BYTE1(a));
 printf("byte2 = 0x%xn", GET_LOW_BYTE2(a));
 printf("byte3 = 0x%xn", GET_LOW_BYTE3(a));
 return 0;
}

 

运行结果:

这也是获取数据各个字节的最常用也最有效的方法。这种类似的位操作在嵌入式方面应用得很多,比如在LCD操作中表示像素颜色值、FLASH的操作等方面都有用到。

关于“c++中如何获取整数各个字节”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[