2010-03-10 39 views

Trả lời

37

IPAddress.HostToNetworkOrderIPAddress.NetworkToHostOrder?

Mỗi phương pháp có quá tải cho các số nguyên 16, 32 và 64 bit.

+0

Tôi giả sử 2 phương pháp này cũng làm như vậy. Tôi lưu ý rằng tình trạng quá tải chỉ dành cho những thứ đã ký. Họ có an toàn về những thứ chưa ký? – pm100

+0

@ pm100: Bạn có thể mong đợi họ là những người tự khắc phục. Tôi không muốn tuyên bố rằng đối với thực tế tuyệt đối mặc dù :) Không chắc chắn những gì bạn có nghĩa là "an toàn trên những điều unsigned" - bạn phải đúc đầu tiên, tại thời điểm đó nó sẽ không được unsigned ... –

+1

đầu tiên - cho rằng một số lượng đáng kể những thứ họ làm việc sẽ là những thứ như địa chỉ IP không được gán cho nó một cách đáng ngạc nhiên rằng không có quá tải cho uint32 vv. Bởi 'an toàn' tôi có nghĩa là tôi cảnh giác với việc ký kết với unsigned, fiddling với bit và đúc lại, nói chung đây là một công thức để tuyên truyền/cắt ngắn, ... wiednesses – pm100

0

@jon-skeet's answer là chính xác nhất theo câu hỏi của bạn. Tuy nhiên, các hàm 'ntoh_' và 'hton_' C được sử dụng rộng rãi để dịch giữa little-endian and big-endian computer architectures.

Nếu ý định của bạn là để thực hiện chuyển đổi cuối cùng, có BitConverter class (lớp tĩnh trong hội đồng cốt lõi) mang đến cho bạn một cách phù hợp hơn. Đặc biệt khi:

  • Làm việc với mảng byte (được sử dụng rộng rãi trong luồng tệp hoặc mạng).
  • Detecting endianess kiến ​​trúc của máy chạy bộ.
  • Chuyển đổi cấu trúc cơ bản ngoài các số nguyên (booleans, decimals) mà không cần in.
  • Mã của bạn không liên quan đến hoạt động mạng (không gian tên System.Net).
+4

ngoại trừ lớp đó không có hàm tương đương với htonl. Tôi sẽ phải nhận được các byte, đảo ngược chúng, sau đó chuyển đổi trở lại – pm100

+1

'BitConverter' không hỗ trợ bất kỳ endianness không có nguồn gốc. (Ít nhất cái tích hợp sẵn không, Jon hay Marc tạo ra một cái mạnh hơn - nhưng làm cho các mảng rác tạm thời vẫn là một sự lãng phí) –

Các vấn đề liên quan