Helpex - Trao đổi & giúp đỡ Đăng nhập
45

Hôm nay tôi đã học một số kiến ​​thức cơ bản về C ++ và biết về nó wchar_t. Tôi không thể tìm ra, tại sao chúng ta thực sự cần loại dữ liệu này, và làm cách nào để sử dụng nó?

45 hữu ích 4 bình luận 33k xem chia sẻ
44

wchar_tđược thiết kế để biểu diễn văn bản ở dạng mã hóa nhiều byte , chiều rộng cố định ; vì thường có kích thước 2 byte nên nó có thể được sử dụng để biểu diễn văn bản trong bất kỳ bảng mã 2 byte nào. Nó cũng có thể được sử dụng để biểu diễn văn bản ở dạng mã hóa nhiều byte có độ rộng thay đổi, trong đó phổ biến nhất là UTF-16.wchar_t

Trên các nền tảng có wchar_tkích thước 4 byte, nó có thể được sử dụng để biểu diễn bất kỳ văn bản nào bằng UCS-4 (Unicode), nhưng vì trên hầu hết các nền tảng, nó chỉ có 2 byte nên nó chỉ có thể đại diện cho Unicode trong một mã hóa có độ rộng thay đổi (thường là UTF-16) . Nó phổ biến hơn để sử dụng charvới mã hóa có độ rộng thay đổi, ví dụ như UTF-8 hoặc GB 18030.

Về hệ điều hành hiện đại duy nhất được sử dụng wchar_trộng rãi là Windows; điều này là do Windows đã sử dụng Unicode trước khi nó được mở rộng qua U + FFFF và do đó, mã hóa 2 byte độ rộng cố định (UCS-2) có vẻ hợp lý. Bây giờ UCS-2 không đủ để đại diện cho toàn bộ Unicode và vì vậy Windows sử dụng UTF-16, vẫn với wchar_tcác đơn vị mã 2 byte.

44 hữu ích 0 bình luận chia sẻ
11

wchar_tlà một nhân vật rộng. Nó được sử dụng để biểu diễn các ký tự đòi hỏi nhiều bộ nhớ hơn để biểu diễn chúng hơn một ký tự thông thường char. Ví dụ, nó được sử dụng rộng rãi trong Windows API.

Tuy nhiên, kích thước của a wchar_tphụ thuộc vào việc triển khai và không được đảm bảo là lớn hơn char. Nếu bạn cần hỗ trợ một dạng định dạng ký tự cụ thể lớn hơn 8 bit, bạn có thể muốn chuyển sang char32_tchar16_tđược đảm bảo là 32 và 16 bit tương ứng.

11 hữu ích 0 bình luận chia sẻ
9

wchar_tđược sử dụng khi bạn cần lưu trữ các ký tự có mã lớn hơn 255 (nó có giá trị lớn hơn charcó thể lưu trữ).

charcó thể nhận 256 giá trị khác nhau tương ứng với các mục nhập trong bảng ISO Latinh. Mặt khác, ký tự rộng có thể nhận hơn 65536 giá trị tương ứng với các giá trị Unicode. Đây là một tiêu chuẩn quốc tế gần đây cho phép mã hóa các ký tự cho hầu như tất cả các ngôn ngữ và các ký hiệu thường được sử dụng.

9 hữu ích 1 bình luận chia sẻ
3

Kiểu dữ liệu wchar_t được sử dụng để hiển thị wide characters that will occupy 16 bits. Kiểu dữ liệu này chiếm "2 hoặc 4" byte.

Chủ yếu wchar_tkiểu dữ liệu được sử dụng khi các ngôn ngữ quốc tế như tiếng Nhật được sử dụng.

3 hữu ích 0 bình luận chia sẻ
3

Tôi hiểu hầu hết họ đã trả lời nó nhưng vì tôi cũng đang học những điều cơ bản về C ++ và biết về nó wchar_t, tôi muốn cho bạn biết những gì tôi hiểu sau khi tìm kiếm về nó.

  1. wchar_tđược sử dụng khi bạn cần lưu trữ một ký tự trên ASCII 255, vì những ký tự này có kích thước lớn hơn loại ký tự 'char' của chúng tôi. Do đó, yêu cầu nhiều bộ nhớ hơn.

    ví dụ:

           wchar_t var = L"Привет мир\n"; // hello world in russian
    
  2. Nó thường có kích thước lớn hơn ký tự 8 bit.

  3. Về cơ bản, hệ điều hành windows sử dụng nó.

  4. Nó thường được sử dụng khi có liên quan đến ngoại ngữ.

3 hữu ích 0 bình luận chia sẻ
2

Kiểu wchar_t được sử dụng cho các ký tự của bộ ký tự mở rộng. Nó nằm trong số các cách sử dụng khác được sử dụng với chuỗi là một chuỗi có thể chứa các ký tự đơn của các bộ ký tự mở rộng, trái ngược với chuỗi có thể chứa các ký tự đơn có kích thước char hoặc sử dụng nhiều ký tự để biểu thị một dấu đơn (như utf8 ).

Kích thước wchar_t phụ thuộc vào ngôn ngữ và theo tiêu chuẩn được cho là có thể đại diện cho tất cả các thành viên của tập ký tự mở rộng lớn nhất được hỗ trợ bởi ngôn ngữ.

2 hữu ích 0 bình luận chia sẻ
0

wchar_tđược chỉ định bằng ngôn ngữ C ++ trong [basic.fundaries] / p5 như:

Loại wchar_tlà một loại riêng biệt mà các giá trị có thể đại diện cho các mã riêng biệt cho tất cả các thành viên của tập ký tự mở rộng lớn nhất được chỉ định trong số các ngôn ngữ được hỗ trợ ( [locale] ).

Nói cách khác, wchar_tlà một kiểu dữ liệu giúp bạn có thể làm việc với văn bản chứa các ký tự từ bất kỳ ngôn ngữ nào mà không cần lo lắng về việc mã hóa ký tự.

Trên các nền tảng hỗ trợ Unicode trên bình diện đa ngôn ngữ cơ bản , wchar_tthường là 4 byte (Linux, BSD, macOS).

Chỉ trên Windows wchar_tlà 2 byte và được mã hóa bằng UTF-16LE, vì lý do lịch sử (Windows ban đầu chỉ hỗ trợ UCS2).

Trong thực tế, wchar_tkhái niệm "1 = 1 ký tự" thậm chí còn trở nên phức tạp hơn, do Unicode hỗ trợ kết hợp các ký tự và grapheme (các ký tự được biểu thị bằng chuỗi các điểm mã).

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c++ , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading