第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在C中將大端點(diǎn)轉(zhuǎn)換為小端點(diǎn)[不使用提供的函數(shù)]

在C中將大端點(diǎn)轉(zhuǎn)換為小端點(diǎn)[不使用提供的函數(shù)]

C
德瑪西亞99 2019-07-10 14:51:31
在C中將大端點(diǎn)轉(zhuǎn)換為小端點(diǎn)[不使用提供的函數(shù)]在C中,我需要編寫(xiě)一個(gè)函數(shù)來(lái)將大端點(diǎn)轉(zhuǎn)換為小端點(diǎn)。我不能使用任何庫(kù)函數(shù)。
查看完整描述

3 回答

?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊

假設(shè)您需要的是一個(gè)簡(jiǎn)單的字節(jié)交換,請(qǐng)嘗試如下

無(wú)符號(hào)16位轉(zhuǎn)換:

swapped = (num>>8) | (num<<8);

無(wú)符號(hào)32位轉(zhuǎn)換:

swapped = ((num>>24)&0xff) | // move byte 3 to byte 0
                    ((num<<8)&0xff0000) | // move byte 1 to byte 2
                    ((num>>8)&0xff00) | // move byte 2 to byte 1
                    ((num<<24)&0xff000000); // byte 0 to byte 3

這將字節(jié)順序從位置1234轉(zhuǎn)換為4321。如果你的輸入是0xdeadbeef,則32位Endian交換可能具有0xefbeadde.

上面的代碼應(yīng)該用宏或者至少用常量來(lái)清除,而不是神奇的數(shù)字,但是希望它能起到作用。

編輯:正如另一個(gè)答案所指出的,有平臺(tái)、操作系統(tǒng)和指令集的特定選項(xiàng),它們比上面的要快得多。在Linux內(nèi)核中,有一些宏(例如cpu_to_be 32),它們很好地處理了endianness。但這些替代物是特定于它們的環(huán)境的。在實(shí)踐中,最好使用多種可用的方法來(lái)處理Endianness問(wèn)題。


查看完整回答
反對(duì) 回復(fù) 2019-07-10
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

包括:

#include <byteswap.h>

您可以獲得與機(jī)器相關(guān)的字節(jié)交換函數(shù)的優(yōu)化版本。然后,您可以輕松地使用以下功能:

__bswap_32 (uint32_t input)

__bswap_16 (uint16_t input)


查看完整回答
反對(duì) 回復(fù) 2019-07-10
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

#include <stdint.h>//! Byte swap unsigned shortuint16_t swap_uint16( uint16_t val ) {
    return (val << 8) | (val >> 8 );}//! Byte swap shortint16_t swap_int16( int16_t val ) {
    return (val << 8) | ((val >> 8) & 0xFF);}//! Byte swap unsigned intuint32_t swap_uint32( uint32_t val ){
    val = ((val << 8) & 0xFF00FF00 ) | ((val >> 8) & 0xFF00FF ); 
    return (val << 16) | (val >> 16);}//! Byte swap intint32_t swap_int32( int32_t val ){
    val = ((val << 8) & 0xFF00FF00) | ((val >> 8) & 0xFF00FF ); 
    return (val << 16) | ((val >> 16) & 0xFFFF);}

更新增加了64位字節(jié)交換

int64_t swap_int64( int64_t val ){
    val = ((val << 8) & 0xFF00FF00FF00FF00ULL ) | ((val >> 8) & 0x00FF00FF00FF00FFULL );
    val = ((val << 16) & 0xFFFF0000FFFF0000ULL ) | ((val >> 16) & 0x0000FFFF0000FFFFULL );
    return (val << 32) | ((val >> 32) & 0xFFFFFFFFULL);}uint64_t swap_uint64( uint64_t val ){
    val = ((val << 8) & 0xFF00FF00FF00FF00ULL ) | ((val >> 8) & 0x00FF00FF00FF00FFULL );
    val = ((val << 16) & 0xFFFF0000FFFF0000ULL ) | ((val >> 16) & 0x0000FFFF0000FFFFULL );
    return (val << 32) | (val >> 32);}


查看完整回答
反對(duì) 回復(fù) 2019-07-10
  • 3 回答
  • 0 關(guān)注
  • 725 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)