Friday 25 August 2017

Sedikit Endian Biner Pilihan


Windows pada IntelAMD juga bersifat little-endian, sehingga tidak diperlukan konversi endian. Sekarang jika Anda dapat menunjukkan catatan spesifik dan dari mana Anda memperoleh data biner, akan lebih mudah untuk menjawabnya. Anda bisa membaca rekaman apapun dari sebuah file. Jika rekaman Anda dideklarasikan sehingga memiliki tata letak yang sama persis seperti data biner, Anda dapat membaca keseluruhan rekaman sekaligus. Jika tidak, Anda harus membaca setiap bidang secara terpisah. Umumnya, Anda dapat membaca catatan, atau bidang catatan individual, dari arus menggunakan Jika data Anda berasal dari soket TCP, Anda dapat, misalnya, menuliskannya ke dalam TMemoryStream, sebagai byte. Kemudian Anda dapat me-reset pointer dari stream ke awal dan membaca data seperti yang ditunjukkan. Seperti yang David komentari, jika byte melewati koneksi TCP dalam urutan byte jaringan, maka masuk akal untuk menjalankan setiap bidang melalui salah satu fungsi WinSock ntohs () atau ntohl (). Setelah semua hal di atas, tapi sebelum item dalam catatan digunakan. Ntohs () mengubah tipe 2 byte, sementara ntohl () mengubah tipe 4 byte. Untuk mengirim item, gunakan fungsi sebaliknya htons () dan htonl () pada setiap item dalam catatan sebelum mengirimnya (secara terpisah). FWIW, cukup mudah, di Win32, untuk mengubah endianness menggunakan: Saya perlu mengirim pesan dari server windows ke server HP ke soket TCPIP. Saya menggunakan Framework 4.0 dengan Visual Studio 2012. Saya dipukul dalam mengubah little to big endian. Saya menyimpan semua nilai yang harus dikirim ke mesin lain dalam struktur dan kemudian mengkonversikan struktur ke array byte. Array byte ini kemudian dikirim melalui soket. Ada beberapa struktur pesan seperti ini dan kami telah mengembangkannya sepenuhnya. Sekarang dikatakan bahwa sistem yang lain adalah server HP dan kita perlu mengkonversi ke Big Endian sebelum mengirimnya dan juga mengubah Big Endian menjadi little endian setelah kita menerima data. Apakah ada cara mudah untuk mengubah ini dalam bentuk struktur Struktur yang saya miliki: Kode yang saya gunakan untuk mengubah struktur menjadi array byte: Pada kode di bawah, variabel quotmessagequot berisi Struktur ACMMessage dan byteArray dikembalikan kembali. Kemudian byteArray dikirim melalui soket TCPIP. CopyStartIndex akan selalu 0 dalam kasus ini. Dalam perkembangan seperti ini bagaimana saya harus mengkonversi dari sampah ke endian besar dan sebaliknya Selasa, 30 September 2014 9:56 AM Jika bidang tunggal seperti double atau string atau integer, itu akan bekerja seperti yang Anda katakan. Tapi saya bekerja dengan struktur. Itu tidak masalah. Anda tahu berapa banyak byte yang diperlukan untuk mewakili setiap bidang struktur ini ditentukan oleh tipe data untuk sebagian besar bidang Anda, dan dengan ukuran yang ditentukan konstan untuk string. Anda juga tahu bahwa setiap data field ada dalam urutan yang dideklarasikan karena Anda menentukan tata letak berurutan. Jadi, gunakan metode yang diusulkan untuk membalikkan array byte dan ubah setiap sub-chunk dari keseluruhan array byte sesuai dengan ukuran masing-masing bidang. Mengingat tata letak contoh ini: Anda harus bisa menggunakan sesuatu yang rutin seperti ini: Reed Kimble - quotWhen Anda melakukan hal yang benar, orang tidak akan yakin Anda telah melakukan apapun sama sekali. Diusulkan sebagai jawaban oleh dbasnett Rabu, 01 Oktober 2014 10:53 AM Ditandai sebagai jawaban oleh Carl Cai Moderator Selasa, 07 Oktober 2014 6:02 Selasa, 30 September 2014 5:11 PM Saya pikir struktur Anda terlalu besar. Anda mungkin mempertimbangkan untuk mengubahnya menjadi kelas dengan properti, dan menambahkan kode yang Anda cari ke kelas itu. Saya meramalkan dua metode yang masing-masing mengembalikan array byte, ToBigEndian dan ToLittleEndian. Mungkin Anda harus menjelaskan bagaimana Anda mengkonversikan struktur yang Anda poskan ke array kuotasi. Tandai jawaban terbaik sebagai jawaban. QuotFooling computers since 1971.quot Tuesday, September 30, 2014 12:21 PM Jika itu adalah bidang tunggal seperti double atau string atau integer, itu akan bekerja seperti yang Anda katakan. Tapi saya bekerja dengan struktur. Selasa, 30 September 2014 14:07 Saya memiliki sekitar 40 struktur yang berbeda. Mengkonversi semua ini akan menjadi pekerjaan besar. Dalam pertanyaan saya sendiri kode untuk mengubah struktur ke array byte diberikan. Bagaimanapun, sisipkan di sini lagi. Diedit oleh Perichiappan Lakshmanan Selasa, 30 September 2014 02:09 Selasa, 30 September 2014 2:08 PM Anda mengembalikan array byte dengan huruf ref sehingga saya tidak akan bekerja jika sudah selesai pada akhir hari Selasa, September 30, 2014 2:29 PM Jika itu adalah bidang tunggal seperti double atau string atau integer, itu akan bekerja seperti yang Anda katakan. Tapi saya bekerja dengan struktur. Itu tidak masalah. Anda tahu berapa banyak byte yang diperlukan untuk mewakili setiap bidang struktur ini ditentukan oleh tipe data untuk sebagian besar bidang Anda, dan dengan ukuran yang ditentukan konstan untuk string. Anda juga tahu bahwa setiap data field ada dalam urutan yang dideklarasikan karena Anda menentukan tata letak berurutan. Jadi, gunakan metode yang diusulkan untuk membalikkan array byte dan ubah setiap sub-chunk dari keseluruhan array byte sesuai dengan ukuran masing-masing bidang. Mengingat tata letak contoh ini: Anda harus bisa menggunakan sesuatu yang rutin seperti ini: Reed Kimble - quotWhen Anda melakukan hal yang benar, orang tidak akan yakin Anda telah melakukan apapun sama sekali. Diusulkan sebagai jawaban oleh dbasnett Rabu, 01 Oktober 2014 10:53 AM Ditandai sebagai jawaban oleh Carl Cai Moderator Tuesday, October 07, 2014 6:02 AM Tuesday, September 30, 2014 5:11 PM Harus kita ubah menjadi Big Endian sebelum mengirimnya dan juga mengubah Big Endian menjadi little endian setelah kita menerima data. Mengapa Anda perlu mengubahnya menjadi endian besar saat dalam transit Apakah sesuatu dalam perjalanan akan perlu membaca data ini atau memahaminya Maafkan saya jika ini menunjukkan ketidaktahuan saya sepenuhnya tentang masalah ini. Leon Stanley - Jangan membayar tukang feri - sampai dia membawa Anda ke sisi lain. Um. Saya menerapkan ini pada perusahaan - bukan kepada Tuhan. Diedit oleh LeonCS Rabu, 01 Oktober 2014 9:24 AM Rabu, 01 Oktober 2014 9:15 Microsoft sedang melakukan survei online untuk memahami pendapat Anda tentang situs Msdn Web. Jika Anda memilih untuk berpartisipasi, survei online akan dipresentasikan kepada Anda saat Anda meninggalkan situs MSDN. Apakah Anda ingin berpartisipasi Mengumpulkan Formulir Endian Data Biner Numerik Contoh ini menunjukkan bagaimana mengkonversi data numerik biner ke bentuk endian yang tidak dibuat dengan LabVIEW yang dapat dibaca. LabVIEW menyimpan angka dalam bentuk big-endian, dengan byte paling penting pertama di memori. Aplikasi Mac dan Sun biasanya mengharapkan data berbentuk big-endian, namun aplikasi Windows biasanya mengharapkan bentuk little-endian, dengan byte paling tidak signifikan terlebih dahulu. Akibatnya, untuk aplikasi Windows yang memerlukan bentuk little-endian, Anda harus secara eksplisit menukar byte di setiap nomor setelah Anda meratakan atau sebelum Anda meremehkan data. Jika aplikasi Windows memerlukan data biner dua byte kecil, Anda harus menukar byte pertama dengan byte kedua di setiap nomor sebelum Anda menulis data.160 Contoh VI (terlampir) menunjukkan lima metode berbeda untuk mengubah data dari besar - Endian ke bentuk little endian, atau sebaliknya. Catatan 160 Angka floating-point di LabVIEW kompatibel dengan IEEE, dan aplikasi target harus dapat membaca angka tersebut. Angka floating-point presisi tunggal dan ganda biasanya diformat dengan tepat, namun angka presisi diperpanjang, yang dengannya ada beberapa format yang digunakan, mungkin tidak. Lihat Catatan Aplikasi pada Penyimpanan Data LabVIEW (ditautkan di bawah) untuk informasi lebih lanjut tentang bentuk endian. LabVIEW 7.1 dan Sebelumnya Ketika Anda mengubah bentuk data endian, jangan gunakan opsi fungsi File LabVIEW Write yang secara otomatis menulis header file. Header ini selalu berbentuk big-endian. Sebagai gantinya, jika Anda membutuhkan header ukuran, tulislah secara eksplisit sebelum Anda menulis data ke file. Anda harus tahu format yang diharapkan oleh aplikasi target. Misalnya, saat aplikasi mengenali file yang dibuat dengan fungsi Write to I16 File atau Write to SGL File dengan atau tanpa pertukaran byte, mungkin ada jenis header yang tidak diberikan oleh VI ini. Bila Anda tahu persis format lamaran yang diharapkan, gunakan fitur yang sesuai di LabVIEW untuk membuat file semacam itu. Saya membuka ini di Labview 7.1 tanpa masalah. Menukar endianess tipe data campuran. - 11.12.2013 Oleh Dave Taylor, Hach Company. Metode yang dijelaskan dalam contoh vi berguna jika Anda menukar item tunggal atau array dari satu jenis. Tapi jika Anda perlu menukar tipe data campuran seperti cluster, ini akan menjadi sangat kikuk. Salah satu cara untuk mengatasi hal ini (yang tentunya tidak masuk akal tapi lebih cepat dan otomatis) adalah menulis cluster ke file biner menggunakan endian besar dan kemudian membaca biner itu kembali sebagai little endian. Untuk melihat efek dari proses ini, typecast cluster masukan Anda ke array U8, kemudian melakukan hal yang sama dengan data yang Anda baca kembali dari little endian. Anda akan melihat bahwa semua tipe data multi-byte telah ditukarkan. Oleh Nstor Uribe Patarroyo, INTA. Contoh yang dapat diunduh disimpan dengan Labview 8.1 dan karenanya tidak dapat dibuka dengan versi sebelumnya. Contoh yang Tidak Sesuai - 08.06.2006 Oleh Steve D, Smiths Aerospace. Contoh download tidak bekerja (bahkan tidak dapat dilihat) dengan Labview 8.0 atau 7.1.Byte Order Dalam komputasi, dua skema representasi angka dasar digunakan: Little-Endian dan Big-Endian. Dalam skema little-endian, nilai multi-byte disimpan mulai dari byte paling signifikan sampai paling banyak, dan sebaliknya dalam skema big-endian. Sebagai contoh, double word value 0x12345678 akan disimpan oleh komputer little endian sebagai: Dan oleh komputer big-endian sebagai: prosesor x86 dan x64 menggunakan pengkodean little-endian, sementara beberapa prosesor lain dari Motorolla dan IBM menggunakan pengkodean big-endian. Hex Editor Neo memungkinkan Anda untuk mengubah urutan byte untuk setiap jendela editor secara terpisah. Harap dicatat bahwa setiap perubahan akan terlihat hanya dalam kata-kata, kata ganda dan tipe tampilan kata quad. Pilihan urutan byte Default pada halaman General Settings digunakan untuk mengatur urutan byte default untuk jendela editor yang baru dibuka. Untuk mengubah urutan byte untuk jendela yang dibuka, gunakan perintah yang tersedia di menu View Byte Order. Secara default, kombinasi tombol CtrlE terikat pada perintah View Byte Order Little-Endian, sedangkan kombinasi tombol CtrlShiftE terikat pada perintah View Byte Order Big-Endian. Efek pada Tipe Floating-Point Standar floating-point (IEEE 754) tidak mendefinisikan pengkodean tipe data floating-point yang tepat pada komputer little-endian dan big-endian. Menurut standar, pengkodean tidak boleh terpengaruh oleh perubahan urutan byte, meskipun, tipe byte floating-point benar-benar bertukar pada beberapa platform big-endian. Hex Editor Neo mendukung skenario, di mana jenis floating-point tidak terpengaruh oleh urutan byte big-endian, dan di mana tipe floating-point dipengaruhi oleh perubahan urutan byte. Perubahan pesanan Byte mempengaruhi opsi jenis floating-point pada halaman Pengaturan Umum yang mengontrolnya. Pilihan ini ON secara default. Inspektur Data dan Struktur Viewer Data Inspektur dan Struktur Modul Viewer juga mengambil urutan byte windows saat ini saat menampilkan dan memproses data. Copyright 2014 HHD Software. Seluruh hak cipta.

No comments:

Post a Comment