2013-03-20 53 views

Trả lời

9

Không rõ bạn đang hỏi gì. Con số chỉ là con số, thực sự. Họ không có cơ sở (bỏ qua phần trình bày phần cứng). Thời gian bạn có cơ sở là khi bạn chuyển đổi số thành và từ chuỗi. Để diễn giải chuỗi dưới dạng số nguyên thập phân, bạn có thể sử dụng int_of_string. Đối với các cơ sở khác, bạn có thể sử dụng Scanf.sscanf. Để chuyển đổi một số thành chuỗi thập phân, bạn có thể sử dụng string_of_int. Đối với các cơ sở khác, bạn có thể sử dụng Printf.sprintf.

# int_of_string "345";; 
- : int = 345 
# Scanf.sscanf "FC" "%x" (fun x -> x);; 
- : int = 252 
# string_of_int 345;; 
- : string = "345" 
# Printf.sprintf "%X" 252;; 
- : string = "FC" 
# 

Đã cấp, Scanf.sscanf khá cồng kềnh để sử dụng. Nhưng tôi không biết bất kỳ chức năng chuyển đổi nào khác trong Thư viện chuẩn OCaml.

Cập nhật

Theo quan sát của barti_ddu, nếu bạn không nhớ thêm một tiền tố để chuỗi đầu vào của bạn, bạn có thể sử dụng cho tất cả int_of_string 4 của căn cứ bạn đề cập đến:

# int_of_string "0xFC";; 
- : int = 252 
# int_of_string "0o374";; 
- : int = 252 
# int_of_string "0b11111100";; 
- : int = 252 

(Hoặc có thể đầu vào của bạn đã có tiền tố, trong trường hợp này là nhiều giải pháp đơn giản hơn.)

+1

+1; và 'Int64.of_string" 0xFFFFFFFC "' cho số lớn. –

+1

btw, int_of_string cũng chấp nhận các cơ sở khác, ví dụ: 'int_of_string" 0xF "' –

+0

Đây là một điểm tốt, cảm ơn. Nếu bạn không phiền với chuỗi chữ số của bạn một chút, bạn có thể sử dụng int_of_string cho tất cả 3 căn cứ. Có lẽ tôi nên cập nhật câu trả lời của tôi ....? –

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