繁体   English   中英

从无符号字符数组转换为长 c

[英]convert from unsigned char array to long c

我使用 fread 将二进制文件中的 long 读入 unsigned char 缓冲区。

现在我想得到长。 我该怎么做?

unsigned char buffer[sizeof(long)];

fread(buffer, sizeof(long), 1, my_file);

谢谢!

当然,您的意思是:

long buffer;
fread(&buffer, sizeof(long), 1, my_file);

如果您打算在机器之间传输文件,则需要执行以下操作:

// will swap the byte order in little endian and not in big endian
long transform_standart_byte_order(long in) {
    return (((unsigned long) ((char*) &in)[0] << 56) |
           (((unsigned long) ((char*) &in)[1] << 48) |
           (((unsigned long) ((char*) &in)[2] << 40) |
           (((unsigned long) ((char*) &in)[3] << 32) |
           (((unsigned long) ((char*) &in)[4] << 24) |
           (((unsigned long) ((char*) &in)[5] << 16) |
           (((unsigned long) ((char*) &in)[6] <<  8) |
           (((unsigned long) ((char*) &in)[7]);
}

void write_long(FILE* my_file, long val) {
    val = transform_standart_byte_order(val);
    fwrite(val, sizeof(val), 1, my_file);
}

long read_long(FILE* my_file) {
    long val;
    fread(&val, sizeof(val), 1, my_file);
    return transform_standart_byte_order(val);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM