14

HexConverterから次のコードを取得しました- Unify Community Wiki

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

これは私に例外を与えます:

FormatException: The specified format 'X2' is invalid

その後、使用しようとしまし"D"たが、これでもエラーが発生しました。機能する唯一のことは"F、浮動小数点数をフォーマットすることです。

宣言に移動すると、アセンブリ ブラウザーで mscorlib.dll/System/Single.ToString (string) が表示されます。これまでのところ良さそうです。

monodevelop 文字列形式の 16 進数または同様の検索文字列をグーグル検索しても、MonoDevelop の制限に関して興味深いものは何も表示されませんでした。

単純な 16 進値変換を取得する前に、何か準備、初期化などを行う必要はありますか?

[更新] Color は Unity の構造体です。

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

dtb の回答を取得して、最終的に次を使用して機能するようになりました。

    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);

そのため、 dtb が言及した整数型の代わりにColorそのコンポーネントを定義するという事実を見逃していました。floatint

[Update-2] よりエレガントなソリューション:

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

1 に答える 1

16

MSDNから:

16 進数 ("X") 形式指定子は、数値を 16 進数の文字列に変換します。フォーマット指定子の大/小文字は、9 より大きい 16 進数に大文字または小文字を使用するかどうかを示します。たとえば、「X」を使用して「ABCDEF」を生成し、「x」を使用して「abcdef」を生成します。この形式は、整数型でのみサポートされています。

Single整数型ではなく、浮動小数点型です。

次を使用しInt32ます。

int value = 10;
string result = value.ToString("X2");
// result == "0A"
于 2013-06-05T17:24:51.363 に答える