您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)c++中如何獲取整數(shù)各個字節(jié),小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
題目:獲取0x12345678各個字節(jié)。
#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%x\n", num.byte.byte0);
printf("byte1 = 0x%x\n", num.byte.byte1);
printf("byte2 = 0x%x\n", num.byte.byte2);
printf("byte3 = 0x%x\n", num.byte.byte3);
return 0;
}
運行結(jié)果:
這種方法的缺點是:會受到大小端的影響。只有在明確大小端的情況下可稍微用一用。以上是小端模式下的運行結(jié)果。
結(jié)構(gòu)&聯(lián)合法不僅僅是在獲取數(shù)據(jù)各個字節(jié)有用,在數(shù)據(jù)協(xié)議、數(shù)據(jù)位拆分等方面很實用,之后再做更詳細(xì)的分享。
#include <stdio.h>
#define GET_LOW_BYTE0(x) ((x >> 0) & 0x000000ff) /* 獲取第0個字節(jié) */
#define GET_LOW_BYTE1(x) ((x >> 8) & 0x000000ff) /* 獲取第1個字節(jié) */
#define GET_LOW_BYTE2(x) ((x >> 16) & 0x000000ff) /* 獲取第2個字節(jié) */
#define GET_LOW_BYTE3(x) ((x >> 24) & 0x000000ff) /* 獲取第3個字節(jié) */
int main(void)
{
unsigned int a = 0x12345678;
printf("byte0 = 0x%x\n", GET_LOW_BYTE0(a));
printf("byte1 = 0x%x\n", GET_LOW_BYTE1(a));
printf("byte2 = 0x%x\n", GET_LOW_BYTE2(a));
printf("byte3 = 0x%x\n", GET_LOW_BYTE3(a));
return 0;
}
運行結(jié)果:
這也是獲取數(shù)據(jù)各個字節(jié)的最常用也最有效的方法。這種類似的位操作在嵌入式方面應(yīng)用得很多,比如在LCD操作中表示像素顏色值、FLASH的操作等方面都有用到。
關(guān)于“c++中如何獲取整數(shù)各個字節(jié)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。