亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1201 | 回復(fù): 0
打印 上一主題 下一主題

[原]本地字節(jié)序與網(wǎng)絡(luò)字節(jié)序 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2007-04-12 13:43 |只看該作者 |倒序?yàn)g覽

                最近在處理64位網(wǎng)絡(luò)傳輸中遇到一些問題,下面是解決的一些過程和記錄的筆記.
ntoh64整個(gè)函數(shù)為前輩所寫,在CSDN上查找到,對此表示感謝.
int64位在LINUX表示為 long long,有一種表示方式為int64,目前沒有找到相關(guān)頭文件和相關(guān)資料。
如果為網(wǎng)絡(luò)傳輸。
第一種方法:當(dāng)作字符串傳輸
第二種方法:linux在byteswap.h頭文件里面提供了bswap_64這個(gè)宏,可以通過bswap_64來對字符順序進(jìn)行轉(zhuǎn)換。
測試大小端字符序列
#include
#include
int main ()
{
    long long c = 0x1234567812345679;
    long long d=bswap_64(c);
//小端字符到大端字符
    if (*(char *)&d == 0x12)
        printf ("Big endian\n");
    else if (*(char *)&d == 0x79)
        printf ("Little endian\n");
//大端字符到小端字符
    long long h=bswap_64(d);
    if (*(char *)&h == 0x12)
        printf ("Big endian\n");
    else if (*(char *)&h == 0x79)
        printf ("Little endian\n");
return 0;
}
Linux端傳輸?shù)絎INDOWS先轉(zhuǎn)換為網(wǎng)絡(luò)的大端字符序,代碼如下:
#include
#include
#include
#include
int main()
{
    int fd;
    fd = open("file.txt", O_RDWR|O_CREAT|O_TRUNC);
    long long data = 135407575609;
printf("%I64d\n", data);
//cover big
data = bswap_64(data);
    printf("%I64d\n", data);
//write cover big
    write(fd, &data, sizeof(data));
    printf("%I64d\n", data);
data = 0;
long long a;
    read(fd, &a, sizeof(a));
data = bswap_64(a);
printf("%I64d\n", a);
    close(fd);
return 0;
}
WINDOWS收到文件后根據(jù)需要看是否將網(wǎng)絡(luò)的大端字符序轉(zhuǎn)換為本地相應(yīng)的字符序,代碼如下:
#include
long long ntoh64(long long inval)
{
       long long outval = 0;
       int i=0;
       for(i=0;i> (i *8))&255);
       return   outval;
}
int main()
{
    FILE *fp;
    fp = fopen("file.txt", "rb+");
    long long buf=0;
    fread(&buf, sizeof(buf), 1, fp);
    printf("Read Data:%I64d\n", ntoh64(buf));
    fclose(fp);
    return 0 ;
}
測試結(jié)果 :可以正確讀取他們的數(shù)據(jù)并顯示.
WINDOWS XP 顯示結(jié)果:
D:\source>test
Read Data:13540757560943242
Linux發(fā)送端顯示結(jié)果:
[hq@h21 test]$ ./rea
                                                      1281942154
                                                      1058746368
                                                      1058746368
                                                      1058746368
由于printf顯示長度問題所以導(dǎo)致顯示結(jié)果與實(shí)際結(jié)果不一樣.在GDB里面調(diào)試查看出結(jié)果與預(yù)期輸入結(jié)果一樣.
file.txt文件采用flashget下載到本地.使用md5sum檢驗(yàn)文件傳輸過程沒有出錯(cuò).
               
               
               
               
               

本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u/8266/showart_276380.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP