0

アプリケーションに読み込まれ、.net データ型に格納される必要がある 10 バイトのシリアル番号を持つデバイスがあります。デバイスでは、符号なしの 10 バイト (80 ビット) の数値として格納されます。この数値に対して数学演算を実行することはないと思いますが、ユーザーに表示するだけです。

.NET フレームワークには、このデータ型を格納する UNIT128 が組み込まれていません。このデータ型を格納するための私の提案は、10 要素のバイト配列を作成し、データをこの配列に読み込むことです。この問題に対するより良い解決策はありますか?

注:この質問で、GUID は 128 バイトの符号付き整数であることがわかりましたが、この方法で GUID を使用するのはお勧めできません。他の提案はありますか?

4

5 に答える 5

4

バイト配列を使用する必要があります。

于 2010-06-03T15:37:20.780 に答える
1

表示するだけの場合は、文字列を使用してみませんか?偶発的な変更に対する追加のセキュリティが必要な場合は、それをビジネスオブジェクトにラップすることもできます。

于 2010-06-03T15:38:46.453 に答える
1

@SLaksに同意します。バイト配列を使用する必要があります。ただし、BigInteger(http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx)も、理論的には下限/上限がないため、機能する可能性があります。これは.NET4専用です。ただし、バイト配列の方が適しています。

于 2010-06-03T15:51:33.990 に答える
0

数値を計算していない場合、System.Stringの何が問題になっていますか?

于 2010-06-03T15:38:05.817 に答える
0

選択肢はほとんどありません。データをどのように使用するかによって異なります。Guid にパックする、バイト配列を使用する、カスタム Struct を使用する、または Base64 または HEX としてパックして文字列に詰め込むことができます。

[StructLayout( LayoutKind.Explicit)]
public struct MyStruct
{
    public MyStruct(byte[] buffer)
    {
        if (buffer.Length != 10)
            throw new ArgumentOutOfRangeException();
        High = BitConverter.ToUInt16(buffer, 0);
        Low = BitConverter.ToUInt64(buffer, 2);
    }
    [FieldOffset(0)]
    public ushort High;  //2 bytes
    [FieldOffset(2)]
    public ulong Low;    //8 bytes

    public byte[] Bytes
    {
        get
        {
            return BitConverter.GetBytes(High)
                .Concat(BitConverter.GetBytes(Low))
                .ToArray();
        }
    }
    public override string ToString()
    {
        return Convert.ToBase64String(Bytes);
    }
    public static MyStruct Parse(string toParse)
    {
        var bytes = Convert.FromBase64String(toParse);
        return new MyStruct(bytes);
    }
}
于 2010-06-03T15:47:06.460 に答える