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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++中的64位ntohl()?

C ++中的64位ntohl()?

慕森卡 2019-11-27 14:29:50
的手冊頁htonl()似乎建議您最多只能將其用于32位值。(實際上,ntohl()是為unsigned long定義的,在我的平臺上是32位。我想如果unsigned long為8字節(jié),則適用于64位int)。我的問題是我需要將64位整數(shù)(在我的情況下,這是一個無符號的long long)從big endian轉換為little endian。現(xiàn)在,我需要進行特定的轉換。但是,ntohl()如果目標平臺為大端字節(jié)序,那么函數(shù)(如)不會轉換我的64位值,那就更好了。(我寧愿避免添加自己的預處理器魔術來執(zhí)行此操作)。我可以使用什么?我想要一些標準的東西(如果存在的話),但我愿意接受實施建議。我已經看到過去使用聯(lián)合完成這種類型的轉換。我想我可以有一個unsigned long long和一個char [8]的聯(lián)合。然后相應地交換字節(jié)。(顯然會在大端字節(jié)序的平臺上中斷)。
查看完整描述

3 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

文檔:man htobe64在Linux(glibc> = 2.9)或FreeBSD上。


不幸的是,在2009年,OpenBSD,F(xiàn)reeBSD和glibc(Linux)并沒有很好地協(xié)同工作來為此創(chuàng)建一個(非內核API)libc標準。


當前,這段簡短的預處理器代碼:


#if defined(__linux__)

#  include <endian.h>

#elif defined(__FreeBSD__) || defined(__NetBSD__)

#  include <sys/endian.h>

#elif defined(__OpenBSD__)

#  include <sys/types.h>

#  define be16toh(x) betoh16(x)

#  define be32toh(x) betoh32(x)

#  define be64toh(x) betoh64(x)

#endif

(在Linux和OpenBSD上測試)應該隱藏差異。它為您提供了這4個平臺上的Linux / FreeBSD風格的宏。


使用示例:


  #include <stdint.h>    // For 'uint64_t'


  uint64_t  host_int = 123;

  uint64_t  big_endian;


  big_endian = htobe64( host_int );

  host_int = be64toh( big_endian );

這是目前最“標準的C庫”式方法。


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 1795 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號