关于创建非标准大小的字节组的非常简单的问题

时间:2010-12-11 20:39:33

标签: java c byte

因此,对于一个空间真正重要的项目,我希望能够将一个占用三个字节的数字写入文件。所以基本上是一个无符号类型,其中16,777,215是最高的数字。

这个数字是作为unsigned int给出的,我已经检查过以确保它在0到16,777,215之间。我该怎么做呢?

Java中的代码是首选,但ANSI C也适用。谢谢!

2 个答案:

答案 0 :(得分:2)

你可以尝试

int number = 
OutputStream os =
os.write(number >> 16);
os.write(number >> 8);
os.write(number);

阅读

InputStream is = 
int number = ((is.read() & 0xFF) << 16) | ((is.read() & 0xFF) << 8) | (is.read() & 0xFF)

然而,考虑到一个字节的成本是如此微不足道,你必须保存很多它们以增加复杂性。我只是将它包含在这里供您参考。

2 TB of disk space is worth about $100
1 GB is worth about 5 cents
1 MB is worth about 0.005 cents
1 KB is worth about 0.000005 cents.
1 B is worth about 0.000000005 cents.

为了比较,以最低工资,(你可能更重视你的时间)

1 minute of your time, 12 cents. ~2 GB.
1 second, 0.2 cents. ~40 MB.
1 key, 0.2 seconds, 0.04 cents ~8 MB.
1 blink. 0.05 seconds, 0.01 cents ~2 MB.

这使得相当令人不安的建议是,不值得按一个键来节省少于8 MB。您甚至可能得出结论,除非它节省2 GB的磁盘空间,否则不值得一个简单的代码更改。 :P

答案 1 :(得分:0)

在C中,您始终可以将* int转换为* char,然后写入3个最低有效字节。对于Big Endian,你跳过第一个char并写下其他三个,对于little endian,你只需要编写前三个字节。