0

私は現在、いくつかのソケットに関する問題を抱えています。

私が望む出力は0x5801で、0x0158これは実際には ushort として 344 です。

ushort t = 344;
p.WriteString("\x58\x01", false);

ハードコードされた 16 進数の代わりに変数が必要になりました。私はすでにいくつかの ReverseBit クラスなどを試しましたが、実際には何も機能しませんでした。

ご協力いただきありがとうございます!

4

4 に答える 4

6

を使用しないことから始めますWriteStringバイナリデータを書きたいですよね?したがってWriteShort、バイトを直接使用または書き込みます。

作業するための多くの情報 ( のタイプp、またはこのデータが表すものなど) を提供していませんが、これがエンディアンの問題である場合は、フレームワークとクラスのようなものであるMiscUtilの使用を検討できます。 、ただし、エンディアンを指定する機能があります。EndianBinaryWriterEndianBinaryReaderBinaryWriterBinaryReader

于 2012-06-27T18:22:38.493 に答える
2

あなたが望むように聞こえIPAddress.HostToNetworkOrderますNetworkOrderToHost

http://msdn.microsoft.com/en-us/library/fw3e4a​​0f

于 2012-06-27T18:25:02.947 に答える
1

これがあなたがやろうとしていることだと思います:

ushort t = 344;
var b = BitConverter.GetBytes(t);
if (!BitConverter.IsLittleEndian)
    Array.Reverse(b);
//write b
于 2012-06-27T18:23:41.007 に答える
1

メソッドによって返されるバイトの順序は、BitConverter.GetBytesコンピューター アーキテクチャのエンディアンによって異なります。ただし、 が期待するバイトの順序BitConverter.ToStringも同様です。つまり、両方の操作が同じマシンで実行される場合、手動で逆順を実行する必要はありません。

ushort t = 344;
byte[] bytes = BitConverter.GetBytes(t);
string hex = BitConverter.ToString(bytes);
hex = hex.Replace("-", "");
p.WriteString(hex);
于 2012-06-27T18:33:32.277 に答える