php エディター Banana では、go-yaml を使用して整数値を 16 進数にマーシャリングする方法を紹介します。 go-yaml は、YAML 形式のデータを処理するための Go 言語ライブラリであり、シンプルで使いやすい API を提供します。整数値を 16 進数にマーシャリングするには、まず整数をバイト スライスに変換し、次に fmt.Sprintf 関数を使用してバイト スライスを 16 進文字列にフォーマットします。最後に、go-yaml ライブラリを使用して、フォーマットされた文字列を YAML ファイルに書き込むことができます。この方法はシンプルかつ効率的であり、私たちのニーズを満たすことができます。次に、具体的な実装手順を詳しく見てみましょう。
人間にとって意味のある16進数表現の整数フィールドを持つ構造体があります。たとえば、Vendor ID フィールドに設定します。
手動編集のためにこのデータを YAML ファイルに保存し、そのファイルからロードしたいと考えています。私が理解している限り、YAML 自体の数値の 16 進表現には問題はありませんが、go-yaml
(私は v3
を使用しています) は整数を 10 進形式でエンコードしているため、見つかりませんでした。方法 16 進形式で保存する通常の方法。
次のコードを開始点として見てみましょう:
リーリーこのコードは、10 進数値を含む YAML を生成します:
リーリー次に、go-yaml
を使用すると、独自の型のカスタム マーシャラーを作成できます。私はこれを行いました(fmt.Sprintf()
フォーマット文字列の0x
プレフィックスを意図的に省略しました):
このコードは、0x
接頭辞なしで 16 進値を生成します (これは現時点では論理的です):
ただし、カスタム マーシャラーに 0x
プレフィックスを追加すると、次のようになります。
リーリー
リーリー
この行を数値にアンマーシャリングするために、カスタム アンマーシャラーも作成する必要がありました。この解決策は好きではありません。最後に次の質問があります:
go-yaml を使用して 16 進数を生成する簡単な方法はありますか?
go-yaml に基づくカスタム エンコーダーを作成することは可能ですか?私にとって、より便利な方法は、たとえば次のように、構造の説明でフォーマット タグを渡すことです。
リーリー
は JSON エンコーダーの内部アーキテクチャと同じものを使用することです。これは、カスタム マーシャリングが最初に処理され、次に引用ロジックが完全に独立して適用されることを意味します。 deadbeef
は引用符で囲まれませんが、0xdeadbeef
は後者の が数字
であるため引用符で囲まれます。カスタム マーシャラーは文字列であると認識している場合に文字列を返すため、誤って数値にアンマーシャリングされないように引用符で囲まれています。 deadbeef は有効な数値として読み取ることができないため、引用符は必要ありません。できることは 2 つあります:
ディレクティブを
go.mod に追加する必要があります。
リーリー
私が解決策 1 を好むのは、他の人が生成した yaml から逸脱することなく、好きな方法で値をシリアル化でき、ブランチを維持する必要がないからです。
以上がgo-yaml を使用して整数値を 16 進数にマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。