字节流读写的小demo

Posted 张三和李四的家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节流读写的小demo相关的知识,希望对你有一定的参考价值。

int main(void)


    //写十六进制数据到stdout 中
    uint16_t width = 700;

    / putc() return the character written as an unsigned char cast to an int
    int ret = putc( width>> 0, stdout);
    printf("\\t [%d] \\n",ret); //[188]
    ret = putc(width >> 8, stdout);
    printf("\\t [%d]",ret); //[2]

    ret = putc('\\n', stdout);
    printf("\\t [%d] \\n",ret); //[10]

    ret =  putc(width , stdout); //[188]
    printf("\\t [%d] \\n",ret);

    ret =  putc('\\n', stdout);
    printf("\\t [%d] -----------------------\\n",ret); //[10]



    ///写十六进制数据到文件中
    fwrite((void*)&width, sizeof(uint16_t), 1, stdout);
    putc('\\n', stdout);

    FILE * file = fopen("test.dat", "wb+");
    if(file == NULL) 
        printf("\\t [%d] -----------------------\\n",10);
        return -1;
    
 
    fputc(width >> 0, file); //写入了 bc, 因为 fputc 只能写入一个字节  ,此时写入的是低八位  bc
    fputc(width >> 8, file); //写入了 2, 此时写入的是高八位
    //恰好 uint16_t 占据了两个字节,如果是uint32_t 呢? 是不是要 width >> 0, width >> 8, width >> 16, width >> 24 是这样写入的吗?
    // 如果读出uint16_t呢? 按照一个字节来读,首先读取到的是 bc ,然后读到的是 2
    // 是这样吗?
    uint32_t u32Val = 0xfefefefe;
    printf("\\t [%x:%x:%x:%x]\\n ", 
             u32Val >> (8*0),
             u32Val >> (8*1),
             u32Val >> (8*2),  
             u32Val >> (8*3));
    printf("%u, [%lu] \\n", u32Val, sizeof(uint32_t));



    fputc('\\t', file);
    fwrite((void*)&width, sizeof(uint16_t), 1, file);

    fclose(file);
    
    file = fopen("test.dat", "rb");
    uint8_t u8Val = fgetc(file);
    printf("u8Val:[%x]\\n", u8Val); //[bc]
    u8Val = fgetc(file);
    printf("u8Val:[%x]\\n", u8Val); //[2]

    fclose(file);

    return 0;


以上是关于字节流读写的小demo的主要内容,如果未能解决你的问题,请参考以下文章

字节流读写文件效率问题

JAVA 字节流和字符流度读写的区别

Java IO-file(读写查)字节流字符流

JAVA中,使用字节流读写文件,为啥找不到文件的位置?请看补充:

字节流

使用带缓冲的字节流读写数据