Member 12223678 Ответов: 2

как сжать строку чисел


всем привет
Я пытался придумать способ сжать (сжать) большую строку, которая содержит только число
можно ли объединить каждую пару чисел и представить их в 8 битах вместо того, чтобы каждый символ занимал весь октет


Вот мой входной образец:

"543216548798654321320000654897986321"

каждое из двух чисел должно занимать 8 бит

спасибо

Sergey Alexandrovich Kryukov

Конечно, это довольно просто. А что вы пробовали так далеко?
То, что вы предложили, является самым простым, но не лучшим сжатием: 8 бит могут хранить 256 чисел, но вы хотите хранить 100 (0-99).
—СА

Matt T Heffron

"... 16 8 биты могут хранить 256 чисел..."
FTFY ;-)

Sergey Alexandrovich Kryukov

8, 8... :-)
—СА

Patrice T

Что вы уже сделали ?
Четное число фигур довольно легко обрабатывать. но нечетное число фигур сложнее.

PIEBALDconsult

Да.

2 Ответов

Рейтинг:
9

Member 12223678

unsigned int i;
	const char *s = "123465789";
	vector<char> num;
	for (i=0;i<strlen(s);i+=2)
	{
		num.push_back((s[i]-'0') + (s[i+1]-'0')*10);
	}

сработает ли что-то подобное ?
будет ли размер вектора num вдвое меньше размера строки s ??


Matt T Heffron

Как написано, он будет опускать последнюю цифру строки нечетной длины. Кроме того, будьте осторожны, как используется эта последовательность "char"s. При передаче любой функции, ожидающей строку, появление значения 0 может привести к тому, что она будет выглядеть усеченной. Возможно, вы должны "или" в 0x80 к значению, чтобы оно не могло быть 0.

Рейтинг:
2

KarstenK

если вы действительно уверены, что это будут только десятичные числа, вы можете пойти так же легко, как это:

char digit1 = sample[i];
int value1 = digit1 - '0'; //is between 0 and 9

char digit0 = sample[i+1];
int value0 = digit0 - '0'; //is between 0 and 9
int number = value1 * 10 + value0;

byteBuffer[n] = (byte) number;

Номер значения должен быть ниже 128 (7 бит), поэтому вы можете сэкономить 1 бит и сохранить значение в 7 битах. Но это продвинутый материал, и вы должны понимать его как здесь от Microsoft прекрасно объяснил.


CPallini

5.