2013-06-05 42 views
10

tôi lấy đoạn mã sau từ HexConverter - Unify Community WikiFormatException khi sử dụng "X" cho hexadecimal định dạng

string hex = color.r.ToString("X2") + color.g.ToString("X2") + color.b.ToString("X2"); 

này mang lại cho tôi những ngoại lệ:

FormatException: The specified format 'X2' is invalid 

tôi đã cố gắng sau đó sử dụng "D" nhưng ngay cả điều này đã ném một lỗi. Điều duy nhất làm việc là "F để định dạng số phao.

Đi đến khai báo tiết lộ mscorlib.dll/System/Single.ToString (chuỗi) trong trình duyệt hội - có vẻ tốt cho đến nay.

Googling cho định dạng chuỗi đơn sắc hex hoặc các chuỗi tìm kiếm tương tự không hiển thị bất kỳ điều gì thú vị về các hạn chế trong MonoDevelop.

Vì vậy, có bất cứ điều gì để chuẩn bị, khởi tạo, ... trước khi tôi có thể nhận được một chuyển đổi giá trị hex đơn giản?

[Cập nhật] Màu sắc là một struct trong Unity:

public struct Color 
{ 
    public float r; 
    public float g; 
    public float b; 
    // ... 

Lấy câu trả lời DTB của tôi cuối cùng đã nhận nó làm việc sử dụng:

int r = (int)(color.r * 256); 
    int g = (int)(color.g * 256); 
    int b = (int)(color.b * 256); 
    string hex = string.Format ("{0:X2}{1:X2}{2:X2}", r, g, b); 

Vì vậy, tôi đã bỏ lỡ một thực tế rằng Color định nghĩa của nó thành phần là float thay vì int và các loại tích hợp mà dtb đã đề cập.

[Update-2] giải pháp More thanh lịch:

Color32 color32 = color; 
string hex = color32.r.ToString ("X2") + color32.g.ToString ("X2") + color32.b.ToString ("X2"); 
+1

Chúng ta có thể thấy lời tuyên bố của mình về màu sắc? hoặc là nó trực tiếp tạo thành wiki? – emd

+0

Là một thử nghiệm đơn giản, tôi đã sử dụng 'System.Drawing.Color.White.R.ToString (" X2 ")' và nhận được là String return 'FF'. Vì vậy, có, "màu" trong ví dụ của bạn là gì? – DonBoitnott

+0

@emd Đó là cấu trúc 'Color' của Unity. Trong wiki họ sử dụng 'Color32' khác nhau. Đây là điểm kết hợp với câu lệnh của dtb về kiểu 'Single'. Cảm ơn :-) – Kay

Trả lời

11

Từ MSDN:

Các hệ thập lục phân ("X") format specifier chuyển đổi một số thành một chuỗi các chữ số thập lục phân . Trường hợp của định dạng chỉ định cho biết có sử dụng chữ hoa hoặc chữ thường cho các chữ số thập lục phân lớn hơn 9. Ví dụ, sử dụng "X" để tạo "ABCDEF" và "x" để tạo "abcdef". Định dạng này chỉ được hỗ trợ cho các loại tích phân.

Single là loại dấu phẩy động, không phải là loại tích phân.

Sử dụng một Int32:

int value = 10; 
string result = value.ToString("X2"); 
// result == "0A" 
+0

Rất cám ơn. Sử dụng int nó hoạt động như mong đợi - xem câu hỏi được cập nhật của tôi. – Kay