码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-09-30 10:23:22      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   ar   文件   数据   sp   div   c   



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”,反之亦然。二进制流是非解释性的,一次处理一个字符,并且不转换字符。 
通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。



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

标签:style   http   io   ar   文件   数据   sp   div   c   

原文地址:http://blog.csdn.net/aa838260772/article/details/39677149

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!