2012-04-07 40 views
5

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

6

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.

+0

Và khi lưu trữ chuỗi này, nó có lưu trữ các ký tự \ x không? – Nosrettap

+2

@Nosrettap: Không, bản dịch được thực hiện tại thời điểm biên dịch. –

+0

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

3

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.

0

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.

0

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.

Các vấn đề liên quan