Tôi hiện đang viết lại (một phần) chức năng printf()
cho một dự án trường học. Nhìn chung, chúng tôi đã được yêu cầu để tạo lại hành vi của các chức năng với nhiều cờ, chuyển đổi, bổ chiều dài ...Hiểu và viết wchar_t trong C
Điều duy nhất tôi đã phải làm và điều đó khiến tôi gặp khó khăn là những lá cờ %C
/%S
(hoặc %lc
/%ls
).
Cho đến nay, tôi đã thu thập rằng wchar_t
là loại có thể lưu trữ ký tự trên nhiều byte, để chấp nhận nhiều ký tự hoặc ký hiệu hơn và do đó tương thích với mọi ngôn ngữ, bất kể bảng chữ cái và đặc biệt nhân vật.
Tuy nhiên, tôi không thể tìm thấy bất kỳ thông tin cụ thể nào về máy wchar
trông giống như máy, độ dài thực tế (có vẻ khác nhau dựa trên một số yếu tố bao gồm trình biên dịch, HĐH ...) hoặc cách thực sự viết chúng.
Cảm ơn bạn trước
Lưu ý rằng chúng tôi bị giới hạn trong các chức năng mà chúng tôi được phép sử dụng. Các chức năng được phép duy nhất là write()
, malloc()
, free()
và exit()
. Chúng tôi phải tự mình có thể tự viết mã cho bất kỳ chức năng nào khác.
Tóm lại, những gì tôi hỏi ở đây là một số thông tin về cách diễn giải và viết "thủ công" bất kỳ ký tự nào wchar_t
, với càng ít mã càng tốt để tôi có thể hiểu toàn bộ quá trình và mã hóa nó riêng tôi.
Tôi sẽ bắt đầu bằng cách thu hẹp những gì 'wchar_t' có thể có nghĩa là trong tình huống của bạn. Trên hầu hết các hệ thống * nix, điều này có nghĩa là UTF-32. Trên Windows, nó có nghĩa là UTF-16. Sau đó bạn cần phải quyết định những gì thu hẹp 'char' của bạn là có được. Trên hầu hết các hệ thống * nix, nó có nghĩa là UTF-8. Tin tốt là việc chuyển đổi giữa các biểu diễn Unicode được xác định rất rõ. – Mgetz
'sizeof (wchar_t)' vẫn hoạt động, phải không? – Kninnug
@Kninnug - Nó hoạt động và trả về 4 byte. – kRYOoX