Действительно простой вопрос о создании групп байтов нестандартного размера - PullRequest
1 голос
/ 11 декабря 2010

Так что для проекта, в котором пространство действительно имеет значение, я хотел бы иметь возможность записать в файл число, занимающее ТРИ байта.Таким образом, по существу, беззнаковый тип, где 16 777 215 - максимально возможное число.

Число задается как целое число без знака, и я уже проверил, чтобы убедиться, что оно находится в диапазоне от 0 до 16 777 215.Как мне выйти за рамки этого?

Код на Java предпочтителен, но ANSI C тоже работает.Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

Вы можете попробовать

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 МБ.Вы можете даже прийти к выводу, что не стоит одного простого изменения кода, если только он не экономит 2 ГБ дискового пространства.: P

0 голосов
/ 11 декабря 2010

В C вы всегда можете привести * int к * символу, а затем записать 3 младших байта. Для Big Endian вы пропускаете первый символ и пишете остальные три, для Little Endian вы просто пишете первые три байта.

...