Básicamente necesita mucho espacio para sus números porque está utilizando la base 10 para representarlos. Una mejora sería usar base 16 (hex). Entonces, por ejemplo, puede representar 255 (3 dígitos) como ff (2 dígitos).
que puede tomar ese concepto aún más mediante el uso de un número de base mucho más grande ... el conjunto de todos los caracteres que son válidos los parámetros de cadena de consulta: ''
AZ, az, 0-9,, '- ',' ~ ',' _ ',' + '
Eso le da una base de 67 caracteres para trabajar (vea Wikipedia on QueryString).
Eche un vistazo a this SO post para los enfoques para convertir la base 10 en bases de números arbitrarios.
EDIT:
En el post relacionado SO, mira a esta parte:
string xx = IntToString(42,
new char[] { '0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x'});
que es casi lo que necesita. Sólo expandirlo mediante la adición de los pocos personajes que le falta:
yz.- ~ _ +
Ese puesto le falta un método para volver a la base 10. No voy a escribir :-) pero el procedimiento es el siguiente:
Defina un contador al que llamaré TOTAL.
Mira el derecho más personaje y encuentra su posición en la matriz.
TOTAL = (la posición del carácter en la matriz) Ejemplo: La entrada es BA1. TOTAL es ahora 1 (ya que "1" está en la posición 1 en la matriz)
Ahora mire el siguiente carácter a la izquierda del primero y encuentre su posición en la matriz. TOTAL + = 47 * (la posición del carácter en la matriz) Ejemplo: La entrada es BA1. TOTAL es ahora (47 * 11) + 1 = 518
Ahora mire el siguiente carácter a la izquierda del anterior y encuentre su posición en la matriz. TOTAL + = 47 * 47 * (la posición del carácter en la matriz) Ejemplo: La entrada es BA1. El total es ahora (47 * 47 * 10) + (47 * 11) + 1 = 243508
Y así sucesivamente.
Le sugiero que escriba una prueba unitaria que convierta un grupo de números base 10 en base 47 y luego otra vez para asegurarse de que su código de conversión funcione correctamente.
Nota cómo representado un número de 6 dígitos de base 10 en sólo 3 dígitos de base 47 :-)
¿Y cuáles son los rangos que esos números pueden tener? ¿Se usan todos los dígitos (0-9), y los dígitos 2-8 son siempre 0? –
No es una respuesta, pero la solución necesita considerar la razón de ser de la compresión. Si se incluye mucho en las páginas generadas, la respuesta es casi seguro utilizar la compresión gzip, que comprimirá esto (y todo el HTML) para usted a un mejor rendimiento mucho mejor que la microcompresión administrada a través de esto. Si se trata de aumentar la velocidad para los usuarios que ingresan la URL, la respuesta deberá considerar esto. – Pool
> ¿Se utilizan todos los dígitos (0-9) y los dígitos 2-8 son siempre 0? NO > Si se incluye mucho en las páginas generadas la respuesta es casi seguro utilizar gzip Todos los enlaces en la página de referencias tendrán href como "MyServer.com/ShowSomething.aspx?IDs=1000000012,1000000021,1000000013,1000000022&". .. "El problema es comprimir ID paramtere – Dave