Sử dụng bảng mã ASCII, có bao nhiêu ký tự trong một GUID?
Tôi quan tâm đến kiểu Microsoft, bao gồm các dấu ngoặc nhọn và dấu gạch ngang.
Sử dụng bảng mã ASCII, có bao nhiêu ký tự trong một GUID?
Tôi quan tâm đến kiểu Microsoft, bao gồm các dấu ngoặc nhọn và dấu gạch ngang.
Câu trả lời:
Từ MSDN :
GUID là một giá trị 128 bit bao gồm một nhóm gồm 8 chữ số thập lục phân, tiếp theo là ba nhóm mỗi nhóm 4 chữ số thập lục phân, theo sau là một nhóm 12 chữ số thập lục phân. Ví dụ sau đây GUID hiển thị nhóm các chữ số thập lục phân trong GUID: 6B29FC40-CA47-1067-B31D-00DD010662DA
Từ Wikipedia :
Thường thì các dấu ngoặc nhọn được thêm vào để bao quanh định dạng trên, chẳng hạn như:
{3F2504E0-4F89-11D3-9A0C-0305E82C3301}
Vì vậy, có tổng cộng 38 ký tự trong bảng mã thập lục phân điển hình với dấu ngoặc nhọn.
-Adam
Như Adam Davis đã nêu, phong cách của Microsoft là mã hóa HEX (với dấu ngoặc nhọn và dấu gạch ngang để làm cho nó dễ đọc hơn) có thể được hiển thị bằng cách sử dụng tập hợp con các ký tự ASCII (0-9 và AF), nhưng đây không phải là mã hóa ASCII cụ thể.
Tôi đoán điều quan trọng cần nhớ là kiểu hiển thị GUID của microsoft chỉ là biểu diễn của GUID, thực sự là một giá trị tích phân 16 byte (như Micheal Trausch đã nêu).
Bạn cũng có thể trình bày nó theo những cách khác nhau, nhỏ gọn hơn bằng cách chuyển đổi các byte thành một bộ ký tự khác (như ASCII).
Về mặt lý thuyết, bạn có thể hiển thị mỗi byte dưới dạng ký tự ASCII mở rộng (255 ký tự), điều này sẽ cho phép bạn lưu GUID dưới dạng chuỗi dài 16 ký tự.
Mặc dù vậy, nó sẽ không dễ đọc vì nó sẽ bao gồm các ký tự khoảng trắng (CR, dấu cách, tab, v.v.) và các ký tự đặc biệt khác, vì vậy điều này sẽ chỉ có ý nghĩa nếu bạn muốn lưu một cách hiệu quả GUID ở định dạng ký tự không thể đọc được của con người , ví dụ: trong cơ sở dữ liệu không hỗ trợ GUID hoặc khớp nhanh các giá trị nhị phân nhỏ: http://en.wikipedia.org/wiki/Extended_ASCII
IMHO, cách dễ đọc nhất để hiển thị GUID nhỏ gọn hơn sẽ là sử dụng mã hóa Base64, cho phép bạn lưu nó trong một chuỗi có độ dài 22 ký tự và sẽ làm cho nó trông giống như sau:
7v26IM9P2kmVepd7ZxuXyQ==
Nhưng như Jeff Atwood tuyên bố trên trang web của mình, bạn cũng có thể đẩy GUID vào một chuỗi được mã hóa ASCII85 với 20 ký tự:
[Rb*hlkkXVW+q4s(YSF0
Để có thêm cảm hứng, hãy xem: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html
Như Adam đã đề cập từ trích dẫn MSDN, UUID là các giá trị 128 bit. Điều này có nghĩa là chúng chiếm 16 byte RAM để giữ một giá trị. Một biểu diễn văn bản sẽ có 32 byte (hai byte cho mỗi byte đơn), cộng với 4 dấu gạch ngang, cộng với hai dấu ngoặc nếu bạn muốn bao gồm chúng; con số này lên tới 38 byte.
Chỉ cần lưu ý rằng nếu bạn đang để lộ UUID cho người dùng phần mềm của mình, họ có thể cung cấp UUID có hoặc không có dấu ngoặc. Nếu bạn đang lưu trữ giá trị ở bất kỳ đâu, tốt nhất nên lưu trữ nó dưới dạng biểu diễn nhị phân 16 byte. Nếu bạn đang tương tác với các triển khai UUID khác, bạn có thể muốn sử dụng định dạng văn bản cơ bản cho khả năng tương tác, vì các triển khai khác nhau thực hiện những điều khác nhau đối với thứ tự byte khi lưu trữ giá trị UUID nhị phân.
Độ dài phụ thuộc vào bảng mã. Bạn có thể nhận được độ dài và mã hóa tiêu chuẩn với đoạn mã này:
public void Main()
{
var guid = Guid.Empty;
Write(guid, "N"); // 32 characters
Write(guid, "D"); // 36 characters (default)
Write(guid, "B"); // 38 characters
Write(guid, "P"); // 38 characters
Write(guid, "X"); // 68 characters
}
private void Write(Guid guid, string format)
{
var guidString = guid.ToString(format);
Console.WriteLine("{0}: {1} ({2} characters)", format, guidString, guidString.Length);
}
Xem phương pháp Guid.ToString để biết chi tiết: