2014-10-06 2 views
0

Я пишу код, который должен сэкономить как можно больше места.C#, отрицательные десятичные значения в heximal

for (int i = 0; i < Code.Length; i++){ 
    CodeInHex[i] = String.Format("{0:X}", Code[i]); // e.g. Dec value = -95, hex = "FFFFFFA1" 
} 

Есть ли способ сделать шестнадцатеричное значение равным -A1 вместо «FFFFFFA1»? (пила разрешена в C# here).

+1

«Как можно больше» - это не то же самое, что «максимально удобно». Я предполагаю, что «как можно больше» приведет к чему-то довольно сложному. – JoriO

+0

btw; для этих вещей существуют много и много форматов кодирования; другой вариант, который бросается в глаза, будет «zigzag varint encoding, as hex» - это будет «BD01» как hex –

ответ

2

Ну, вы могли бы сделать это вручную:

var val = Code[i]; 
CodeInHex[i] = val < 0 ? ("-" + (-val).ToString("X")) : val.ToString("X"); 

Но! Отрицательный гекс не является общим способом представления отрицательных чисел. Он разрешен только в C#, потому что это оператор унарного отрицания, примененный к положительной константе; то есть когда вопрос показывает -0x1, он «отрицает (некоторое выражение)», где «некоторое выражение» равно 0x1.

+1

Если можно создать собственную систему, представляющую числа, тогда было бы разумнее использовать гораздо более высокую базу на цифры. Например, используя цифры, а верхние и нижние регистровые буквы могут обозначать целые числа базы 62, что значительно сокращает строковое представление. – JoriO

+0

приводит к '-5F' вместо' -A1' –

+0

Не могли бы вы прокомментировать вторую строчку? –

Смежные вопросы