整型数据的二进制格式和文本格式的传输方式

来源:互联网 发布:手动添加网络ssid 编辑:程序博客网 时间:2024/05/16 17:50


1.将1个整型数据输入一个缓冲区char *buffer,实现跨平台传输,以二进制方式和文本方式分别实现写缓冲区和读缓冲区

---->在网络中传输是大端模式,而在本机上可能是小端模式,这个需要先判断

#include <stdio.h>#include <stdlib.h>#include <string.h>char buf1[1024];char buf2[1024];int ascii_write_to(int);int binary_write_to(int);int binary_read_from();int ascii_read_from();int main(int argc, const char *argv[]){    int a = 0x12345678;    binary_write_to(a);    ascii_write_to(a);    printf("%x %x\n", binary_read_from(), ascii_read_from());    return 0;}int ascii_write_to(int data){    sprintf(buf1, "%d", data);    return data;}int binary_write_to(int data){    short int x = 0x0001;    char *p = (char*)&x;    if(*p)//小端模式    {        int tmp = (data >> 24)&0xff | \                  (data >> 8)&0xff00 | \                  (data << 8)&0xff0000 |  \                  (data << 24)&0xff000000;        *(int*)buf2 = tmp;    }    else //大端模式        memcpy(buf2, &data, sizeof(data));    return data;}int ascii_read_from(){    int tmp;    sscanf(buf1, "%d", &tmp);    return tmp;}int binary_read_from()    {    int data = *(int*)buf2;     unsigned short a = 0x0001;     char *p = &a;     if(!(*p))     {       int tmp  = data;//大端机     }     else//小端机     {         int tmp = (data >> 24)&0xff | \              (data >> 8)&0xff00 | \              (data << 8)&0xff0000 |  \              (data << 24)&0xff000000;     }    return tmp;}


流可以分为两种类型:文本流(ASCII)和二进制流。文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“\n”,反之亦然。二进制流是非解释性的,一次处理一个字符,并且不转换字符。 
通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。



0 0