Có bao nhiêu ký tự trong một GUID?


82

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.


2
Tất cả chúng đều có cùng độ dài. Nếu bạn đếm các ký tự trong một, bạn sẽ biết độ dài của tất cả chúng.
Greg Hewgill

1
@Greg - Đó là một giả định rất kém để đưa ra, trừ khi bạn hiểu rằng độ dài sẽ không thay đổi.
Adam Davis

8
Nếu độ dài khác nhau, thì câu hỏi này giống như hỏi, "một đoạn dây dài bao nhiêu?" Thay vào đó, đây là câu hỏi "có bao nhiêu quả trứng trong một tá?"
Greg Hewgill

8
Khi tôi tìm kiếm câu hỏi này, mọi câu trả lời đều chỉ đến định nghĩa của một hướng dẫn. Phản đối tôi nếu bạn muốn, nhưng tôi chỉ đang cố gắng làm cho câu trả lời cho câu hỏi cụ thể này dễ tìm hơn, không cần đếm cho những người hỏi trong tương lai.
Jim Counts

2
Tôi hiểu bạn đang nói gì, nhưng nếu ai đó vừa được giới thiệu về NewDataX, câu hỏi về độ dài là hợp lệ và bạn không thể cho rằng những gì bạn đã thấy là minh chứng cho mọi NewDataX khác cho đến khi bạn hiểu NewDataX là gì.
Adam Davis

Câu trả lời:


130

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


@magnifico - xem đoạn cuối cùng của câu trả lời này: "Vì vậy, có tổng cộng 38 ký tự trong mã hóa thập lục phân điển hình với dấu ngoặc nhọn."
Randolpho ngày

1
Không cần phải chiến đấu với phóng đại - anh ta đặt câu hỏi, anh ta sẽ quyết định xem ai là người đưa ra câu trả lời phù hợp nhất. Anh ấy có lý do để thích câu trả lời khác hơn câu trả lời này, tôi chắc chắn.
Adam Davis

@Beska vì đó là những gì Stack Overflow dành cho. Thay vì giao cho một người một con cá, hãy giao cùng một con cá cho một triệu người.
bugloaf

@bugloaf Hừm. Tôi nghi ngờ cả hai nhận xét của tôi đều liên quan đến một cái gì đó đã bị xóa, vì chúng không có ý nghĩa gì trong bối cảnh hiện tại ... và câu đầu tiên là phản hồi rất cụ thể cho một thứ gì đó đã biến mất. Tôi đã loại bỏ chúng. (Trong bối cảnh hiện nay nó trông giống như tôi đã xỉ vả những câu trả lời, mà là một câu trả lời tốt, và đó sẽ làm cho không có ý nghĩa đối với tôi để làm, và bạn được gọi một cách chính xác ra.)
Beska

@AdamDavis Tôi đếm 32 chứ không phải 38. chỉnh sửa: bạn phải đếm các dấu ngoặc nhọn và dấu gạch ngang, đừng bận tâm.
KyleM

31

TL; DR: Không có.

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


3
Tôi đã đăng một bộ mã hóa / giải mã Ascii-85 trong C # tại đây: stackoverflow.com/questions/2827627/…
sheikhjabootie

1
Giá như câu trả lời này có một chữ "Không" to và đậm ở đầu để thu hút người đọc và hoạt động như một TL; DR. ;)
jpmc26

14

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.


6

Độ 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:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.