Bạn về cơ bản cần nhiều chỗ cho số của bạn vì bạn đang sử dụng cơ số 10 để đại diện cho chúng. Một cải tiến sẽ được sử dụng cơ sở 16 (hex). Vì vậy, ví dụ, bạn có thể đại diện cho 255 (3 chữ số) là ff (2 chữ số).
Bạn có thể lấy khái niệm mà hơn nữa bằng cách sử dụng một cơ sở số lượng lớn hơn nhiều ... tập tất cả các ký tự có giá trị thông số chuỗi truy vấn: ''
AZ, az, 0-9, '- ',' ~ ',' _ ',' + '
Điều đó mang lại cho bạn cơ sở 67 ký tự để hoạt động (xem Wikipedia on QueryString).
Hãy xem this SO post để biết cách tiếp cận chuyển đổi cơ sở 10 thành số căn cứ tùy ý.
EDIT:
Trong SO bài liên quan, nhìn vào phần này:
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'});
Đó là hầu hết những gì bạn cần. Chỉ cần mở rộng nó bằng cách thêm vài nhân vật đó là mất tích:
yz.- ~ _ +
Đó bài thiếu một phương pháp để trở về căn cứ 10. Tôi sẽ không viết nó :-) nhưng thủ tục như sau:
Xác định bộ đếm tôi sẽ gọi TOTAL.
Nhìn vào ngay hầu hết ký tự và tìm vị trí của nó trong mảng.
TOTAL = (vị trí của ký tự trong mảng) Ví dụ: Đầu vào là BA1. TOTAL bây giờ là 1 (vì "1" ở vị trí 1 trong mảng)
Bây giờ hãy xem ký tự tiếp theo bên trái của ký tự đầu tiên và tìm vị trí của nó trong mảng. TOTAL + = 47 * (vị trí của ký tự trong mảng) Ví dụ: Đầu vào là BA1. TOTAL hiện là (47 * 11) + 1 = 518
Bây giờ hãy xem ký tự tiếp theo bên trái của ký tự trước và tìm vị trí của nó trong mảng. TOTAL + = 47 * 47 * (vị trí của ký tự trong mảng) Ví dụ: Đầu vào là BA1. Tổng số bây giờ là (47 * 47 * 10) + (47 * 11) + 1 = 243508
Và cứ tiếp tục như vậy.
Tôi khuyên bạn nên viết một bài kiểm tra đơn vị chuyển đổi một loạt 10 số cơ sở thành cơ sở 47 và sau đó quay lại để đảm bảo mã chuyển đổi của bạn hoạt động đúng.
Lưu ý làm thế nào bạn đại diện cho một 6 chữ số cơ sở 10 chỉ trong 3 chữ số của cơ sở 47 :-)
Và các dải số đó có thể có những gì? Tất cả các chữ số (0-9) được sử dụng và có phải là chữ số 2-8 luôn 0 không? –
Không phải là câu trả lời - nhưng giải pháp cần xem xét lý do đằng sau việc nén? Nếu nó được bao gồm rất nhiều trong các trang tạo ra câu trả lời là gần như chắc chắn để sử dụng nén gzip mà sẽ nén này (và tất cả các HTML) cho bạn ở hiệu suất tốt hơn nhiều hơn so với nén vi quản lý thông qua này. Nếu đó là để tăng tốc độ cho người dùng nhập URL thì câu trả lời sẽ cần phải xem xét điều này. – Pool
> Tất cả các chữ số (0-9) được sử dụng và có phải là chữ số 2-8 luôn 0 không? NO > Nếu nó được bao gồm rất nhiều trong các trang tạo ra câu trả lời là gần như chắc chắn để sử dụng gzip Tất cả các liên kết trên trang giới thiệu sẽ có href là "MyServer.com/ShowSomething.aspx?IDs=1000000012,1000000021,1000000013,1000000022&. .. "Vấn đề là để nén ID paramtere – Dave