Tôi đang viết một chương trình C/C++ liên quan đến việc đặt một biểu diễn hex của một số vào một chuỗi và tôi đang bối rối như thế nào \x
hoạt động. Tôi đã nhìn thấy những ví dụ mà mọi người đã viết những thứ như "\ xb2". Trong trường hợp này, làm thế nào để chương trình biết nếu bạn muốn hex của b theo sau là số 2 hoặc nếu bạn muốn hex của b2? Ngoài ra, khi nó lưu trữ này vào memeory hiện nó lưu các ký tự "\ x" hoặc hiện nó chỉ lưu đại diện hex?Làm thế nào để " x" làm việc trong một String?
Trả lời
Từ tiêu chuẩn C99 (6.4.4.4):
Mỗi bát phân hay dãy thoát thập lục phân là chuỗi dài nhất của các nhân vật có thể tạo thành dãy thoát.
Ví dụ: chuỗi "123\x45"
được lưu trữ dưới dạng hex là 31 32 33 45
.
Theo câu trả lời của Oli, giá trị hợp lệ dài nhất sau '\ x' được sử dụng.
'\ x' không được lưu trữ. Bất kỳ chuỗi thoát nào không lưu trữ các ký tự bạn nhìn thấy trên màn hình, nó lưu trữ ký tự thực được chỉ định. Ví dụ: '\ n' thực sự được lưu trữ dưới dạng ký tự linefeed, 0x0A.
Khi bạn sử dụng trình tự thoát \ x bên trong một chuỗi dữ liệu theo \ x thực sự được lưu trữ trong biểu diễn nhị phân của nó.
Vì vậy, chuỗi "ABC" là tương đương với chuỗi "\ x414243"
Nếu bạn muốn phát ra các giá trị thập lục phân trong hình thức hiển thị ký tự, bạn sẽ muốn sử dụng% x hoặc% định dạng X specifier nhân vật:
printf("%X%X%X", 'A', 'B', 'C'); // emits "414243"
Xem Phần 1.2.6 và Mục 1.2.7 của Hướng dẫn C Thư viện tham khảo
Hope giải thích giúp.
Bản dịch được thực hiện tại thời gian biên dịch sao cho mỗi chuỗi bạn nhập thủ công vào mã nguồn với \x
và các ký tự đó kết thúc bằng ký tự đại diện cho mã nhị phân. Nếu bạn muốn làm điều này tại thời gian chạy, bạn sẽ cần phải gọi một hàm phân tích cú pháp như strtol()
bằng cách sử dụng cơ số 16 chuyển chuỗi chứa hex và đúc nó thành một char.
- 1. cho x trong y(): làm thế nào để làm việc này?
- 2. Làm thế nào để tạo một bản sao lớp String?
- 3. Làm thế nào để multiprocessing.Manager() làm việc trong python?
- 4. Làm thế nào để san bằng IO [[String]]?
- 5. Làm thế nào để cư một Spinner từ String mảng
- 6. làm thế nào để tôi .decode ('string-escape') trong Python3?
- 7. Làm thế nào để chuyển đổi Blob để String và String để Blob trong java
- 8. Làm thế nào để thay thế một giữ chỗ trong một String với một Pattern SimpleDateFormat
- 9. Làm thế nào để tìm kiếm một String trong List <tuple <string, string >> trong C#
- 10. Làm thế nào để thay thế một ký tự từ một String trong SQL?
- 11. Làm thế nào để có được thành thạo NHibernate làm việc với NHibernate 3.x
- 12. std :: string x (x);
- 13. Làm thế nào để jdbc làm việc
- 14. làm thế nào để chuyển đổi ListItemCollection (dropdownlist.items) thành một từ điển <string, string>?
- 15. làm thế nào để làm việc scalaz.Validation loopSuccess và loopFailure
- 16. Làm thế nào để chuỗi obfuscation trong obfuscators làm việc?
- 17. Làm thế nào để Enumerators làm việc trong Ruby 1.9.1?
- 18. Làm thế nào để sbrk() làm việc trong C++?
- 19. Làm thế nào để làm việc với ssh trong PhpStorm?
- 20. Làm thế nào để cài đặt thủ công một Connection String Oracle trong một DbContext
- 21. Làm thế nào để chuyển đổi một kiểu dữ liệu CLOB thành một String trong Hibernate?
- 22. Làm thế nào để chuyển đổi từ điển <string, object> để Dictionary <string, string> trong C#
- 23. Làm thế nào để chuyển đổi Platform :: String thành char *?
- 24. Làm thế nào để x | 0 sàn số trong JavaScript?
- 25. Làm thế nào để lặp X lần trong Django?
- 26. Làm thế nào để làm cho reCAPTCHA làm việc với một ValidationGroup trong ASP.Net (captcha)
- 27. Làm thế nào để ra một String trên nhiều dòng sử dụng đồ họa
- 28. Java: Làm thế nào để ngăn chặn 'systemId' trong EntityResolver # resolveEntity (String publicId, String systemId) khỏi bị tuyệt đối đến thư mục làm việc hiện tại
- 29. Làm thế nào để ToList() trên một công việc IEnumerable?
- 30. Làm thế nào để truy vấn một mảng [String] cho một trận đấu regexp?
Và khi lưu trữ chuỗi này, nó có lưu trữ các ký tự \ x không? – Nosrettap
@Nosrettap: Không, bản dịch được thực hiện tại thời điểm biên dịch. –
Tôi biết điều này là gần 6 tuổi, nhưng có cách nào để thoát khỏi chuỗi thập lục phân mà không viết bất cứ thứ gì vào chuỗi không ?? Giả sử tôi muốn có một chuỗi với 255 'a' 'b' 'c'. Tôi không thể viết "\ xffabc" và tôi không thể viết "\ xff abc" vì tôi đang thêm một ký tự. – yakoudbz