Mọi người dường như bị bỏ qua mã hóa byte theo đơn đặt hàng của dự kiến của mình đầu ra. Lớp BitConverter
sử dụng mã hóa cố định (thường là Little-Endian, IIRC). Đầu ra trong ví dụ này được giả định là Big-Endian. Trong một thế giới hoàn hảo bạn muốn chỉ cần làm toán chính mình, nhưng đó là đơn giản để sử dụng Array.Reverse
sau đó sử dụng BitConverter
lớp sẵn có.
Có lẽ sẽ là một đống câu trả lời trước khi tôi nhận được để đăng bài này vì vậy đây là một mảnh thực sự nhanh chóng mã không an toàn:
public static unsafe ulong ToULong(byte[] values)
{
byte* buffer = stackalloc byte[8];
if (BitConverter.IsLittleEndian)
Array.Reverse(values);
System.Runtime.InteropServices.Marshal.Copy(values, 0, (IntPtr)buffer, values.Length);
return *(ulong*)buffer;
}
Nguồn
2013-02-21 12:39:54
A 'uint' là 4 byte, nhưng bạn đã có 6 byte ở đó. Trong mọi trường hợp, bạn có biết lớp 'BitConverter' không? – Ani
Chỉ cần thực hiện phép tính: 'srno [0] * 0x10000000000 + srn0 [1] * 0x100000000 ...'. Hay bất cứ cái gì. –
@Ani: ok không có vấn đề cho tôi biết về ulong? lớp BitConverter cần index Tôi không muốn cho chỉ số perticular Tôi muốn chuyển đổi toàn bộ mảng – Kevan