私は現在、いくつかのソケットに関する問題を抱えています。
私が望む出力は0x5801
で、0x0158
これは実際には ushort として 344 です。
ushort t = 344;
p.WriteString("\x58\x01", false);
ハードコードされた 16 進数の代わりに変数が必要になりました。私はすでにいくつかの ReverseBit クラスなどを試しましたが、実際には何も機能しませんでした。
ご協力いただきありがとうございます!
私は現在、いくつかのソケットに関する問題を抱えています。
私が望む出力は0x5801
で、0x0158
これは実際には ushort として 344 です。
ushort t = 344;
p.WriteString("\x58\x01", false);
ハードコードされた 16 進数の代わりに変数が必要になりました。私はすでにいくつかの ReverseBit クラスなどを試しましたが、実際には何も機能しませんでした。
ご協力いただきありがとうございます!
を使用しないことから始めますWriteString
。バイナリデータを書きたいですよね?したがってWriteShort
、バイトを直接使用または書き込みます。
作業するための多くの情報 ( のタイプp
、またはこのデータが表すものなど) を提供していませんが、これがエンディアンの問題である場合は、フレームワークとクラスのようなものであるMiscUtilの使用を検討できます。 、ただし、エンディアンを指定する機能があります。EndianBinaryWriter
EndianBinaryReader
BinaryWriter
BinaryReader
あなたが望むように聞こえIPAddress.HostToNetworkOrder
ますNetworkOrderToHost
これがあなたがやろうとしていることだと思います:
ushort t = 344;
var b = BitConverter.GetBytes(t);
if (!BitConverter.IsLittleEndian)
Array.Reverse(b);
//write b
メソッドによって返されるバイトの順序は、BitConverter.GetBytes
コンピューター アーキテクチャのエンディアンによって異なります。ただし、 が期待するバイトの順序BitConverter.ToString
も同様です。つまり、両方の操作が同じマシンで実行される場合、手動で逆順を実行する必要はありません。
ushort t = 344;
byte[] bytes = BitConverter.GetBytes(t);
string hex = BitConverter.ToString(bytes);
hex = hex.Replace("-", "");
p.WriteString(hex);