Rumah pembangunan bahagian belakang Tutorial C#.Net C/C++中字节序、类型转化的深入理解

C/C++中字节序、类型转化的深入理解

Nov 17, 2016 pm 01:12 PM
c/c++

 如果将字节序、类型转化单独一个拿出来说时,大家可能都觉得很简单,但是理解的不深入。如果将其结合起来探讨,可能我们就会理解的很透彻。

关于字节序和类型转化的基础,大家如果不太理解,可以参考以下博客:

https://my.oschina.net/u/1783725/blog/647973  大小字节序

https://my.oschina.net/u/1783725/blog/700970  类型转化

在进入正题之前,在啰嗦一句:

系统位数不同对应数据类型的字节数大小也不同

QQ图片20161117130906.png

详细介绍两者之间的联系

字节序: 操作的内存,就是将我们看到的数据存放在内存中的规则。

    大字节序:大端有效 ,高位数据先放入低地址内存 , 低位数据放入高地址内存;小字节序:小端有效,低位数据先放入低地址内存 , 高位数据再放入高地址内存

    操作内存(如:memcpy)就需要考虑字节序

QQ图片20161117104700.png

类型转化: 操作的是读出的数据,就是将从内存中读取的数据,根据类型字节的大小进行转化。

位数多的转化为位数小的(会截断高位的数据,留下地位的数据),位数小的转化为位数多的(将高位的数据补为0)。  

QQ图片20161117104700.png

一个例子来读懂他们

1、赋值与字节序无关,操作内存(memcpy)就需要考虑字节序

1:将unsigned  long  long类型的0xABCDEF1234赋值给unsigned  long类型的变量,与字节序无关

2:unsigned  long  long类型的0xABCDEF1234变量使用memcpy到short类型的变量,发现为0,与字节序有关

代码如下:

#include <stdio.h>int main(int argc, char *argv[])
{
	unsigned long long ullVar = 0xABCD1234;	
	unsigned long ulVar1 = 0;	
	unsigned long ulVar2 = 0;	
	/*memcpy操作内存时,需要考虑系统的大小字节序,如果是大字节序的话,高位的数据保存在低地址上*/
	memcpy(&ulVar1,&ullVar,sizeof(ulVar1));	/*赋值时,就是讲读出的数据按照要赋值的数据类型的大小进行转换*/
	ulVar2 = ullVar;	printf("ulVar1=%x      ulVar2=%x \n",ulVar1,ulVar2); 
	//输出:ulVar1=0      ulVar2=abcd1234
	return 0;
}
Salin selepas log masuk


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perbezaan antara php dan c# Apakah perbezaan antara php dan c# Jun 02, 2023 pm 01:45 PM

Perbezaan antara php dan c# ialah: 1. Sistem jenis bahasa adalah berbeza, PHP adalah dinamik, manakala C# adalah jenis statik 2. Platform yang digunakan adalah berbeza, PHP boleh mencapai cross-platform, manakala C# adalah eksklusif untuk Windows 3; . Paradigma pengaturcaraan adalah berbeza, PHP Ia menyokong pengaturcaraan berorientasikan objek, prosedural dan berfungsi, dan C# lebih cenderung kepada pengaturcaraan berorientasikan objek 4. Kelajuan pelaksanaan berbeza, PHP lebih cepat, dan C# agak perlahan; Senario aplikasi adalah berbeza, PHP digunakan dalam pembangunan web, pelayan, dll. C# digunakan untuk desktop Windows dan aplikasi web.

Buat alat pemformatan kod C/C++ menggunakan alat Clang Buat alat pemformatan kod C/C++ menggunakan alat Clang Aug 26, 2023 pm 01:09 PM

Dalam tutorial ini, kami akan membincangkan program untuk mencipta alat pemformatan kodC/C++dengan alat bantuanhelpofclang.SETUPsudoaptinstallpythonsudoaptinstallclang-format-3.5 Kami kemudiannya akan mencipta fail Python di lokasi yang pengguna semasa mempunyai kebenaran membaca dan menulis. Contoh importoscpp_extensions=(".cxx",".cpp&

Mengapa dalam C/C++, saiz struktur tidak sama dengan jumlah saiz setiap ahli? Mengapa dalam C/C++, saiz struktur tidak sama dengan jumlah saiz setiap ahli? Aug 26, 2023 am 09:29 AM

Saiz elemen jenis struktur yang diperoleh oleh sizeof() tidak selalu sama dengan saiz setiap ahli individu. Kadangkala pengkompil menambah beberapa padding untuk mengelakkan masalah penjajaran. Jadi dimensi mungkin berubah. Padding ditambah apabila anggota struktur diikuti oleh anggota bersaiz lebih besar atau berada di hujung struktur. Penyusun yang berbeza mempunyai jenis kekangan penjajaran yang berbeza. Dalam piawaian C, jumlah struktur penjajaran adalah bergantung kepada pelaksanaan. Kes 1 Dalam kes ini, z berganda ialah 8 bait panjang, yang lebih besar daripada x (4 bait)). Jadi 4 bait lagi padding ditambah. Selain itu, data jenis pendek y mempunyai 2 bait ruang dalam ingatan, jadi 6 bait tambahan ditambah sebagai padding. Contoh kod #include<stdio.h>structmyS

Satu artikel menerangkan secara terperinci konfigurasi vscode C/C++ menjalankan persekitaran [pengajaran peringkat pengasuh] Satu artikel menerangkan secara terperinci konfigurasi vscode C/C++ menjalankan persekitaran [pengajaran peringkat pengasuh] Feb 27, 2023 pm 07:33 PM

Bagaimana untuk membangunkan C/C++ dalam VScode? Bagaimana untuk mengkonfigurasi persekitaran C/C++? Artikel berikut akan berkongsi dengan anda tutorial persekitaran berjalan C/C++ konfigurasi VScode (pengajaran peringkat pengasuh).

Dalam C/C++, terdapat dua operasi: pra-kenaikan dan pasca-kenaikan. Dalam C/C++, terdapat dua operasi: pra-kenaikan dan pasca-kenaikan. Aug 25, 2023 pm 02:25 PM

Di sini kita lihat apa itu pra-kenaikan dan pasca-kenaikan dalam C atau C++. Kedua-dua pra-kenaikan dan pasca-kenaikan adalah pengendali kenaikan. Tetapi terdapat sedikit perbezaan antara mereka. Operator pra-kenaikan mula-mula menambah nilai pembolehubah dan kemudian memberikannya kepada pembolehubah lain, tetapi dalam kes pengendali selepas kenaikan, ia mula-mula memberikan kepada pembolehubah dan kemudian menambah nilai. Contoh #include<iostream>usingnamespacestd;main(){ intx,y,z x=10;&nb;

Dalam C/C++, fungsi strcpy() ialah fungsi yang digunakan untuk menyalin satu rentetan ke rentetan lain Dalam C/C++, fungsi strcpy() ialah fungsi yang digunakan untuk menyalin satu rentetan ke rentetan lain Sep 09, 2023 am 08:49 AM

Fungsi strcpy() ialah fungsi perpustakaan standard. Ia digunakan untuk menyalin satu rentetan ke rentetan yang lain. Dalam bahasa C, ia diisytiharkan dalam fail pengepala "string.h", manakala dalam bahasa C++, ia diisytiharkan dalam fail pengepala cstring. Ia mengembalikan penunjuk ke destinasi. Ini ialah sintaks strcpy() dalam bahasa C, char*strcpy(char*dest,constchar*src); Ia menyalin keseluruhan rentetan ke dalam rentetan sasaran. Ia menggantikan keseluruhan rentetan dan bukannya menambahkannya. Ia tidak mengubah rentetan sumber. Berikut ialah contoh strcpy() dalam bahasa C: Contoh Demo Dalam Talian#in

Program C/C++ untuk mengira bilangan sifar mengekor dalam pemfaktoran nombor Program C/C++ untuk mengira bilangan sifar mengekor dalam pemfaktoran nombor Aug 29, 2023 pm 12:29 PM

Di sini kita akan melihat cara mengira bilangan sifar mengekor dalam hasil pemfaktoran sebarang nombor. Oleh itu, jika n=5, maka 5! =120. Hanya ada satu di belakang 0. Untuk 20!, ia akan menjadi 4 sifar sebagai 20!=2432902008176640000. Cara paling mudah ialah mengira faktorial dan mengira 0. Tetapi untuk nilai n yang lebih besar, pendekatan ini gagal. Jadi kita akan mengambil pendekatan lain. Jika faktor perdana ialah 2 dan 5, maka sifar tertinggal akan muncul. Jika kita mengira 2 dan 5, kita boleh mendapatkan hasilnya. Untuk melakukan ini, kami akan mengikuti peraturan ini. Mengekori 0 = Mengira algoritma untuk 5 dalam faktorial (n) kiraan faktor perdanaTrailingZeros(n)mula &

Laksanakan pernyataan if and else secara serentak dalam C/C++ Laksanakan pernyataan if and else secara serentak dalam C/C++ Sep 05, 2023 pm 02:29 PM

Dalam bahagian ini, kita akan melihat cara untuk melaksanakan kedua-dua bahagian if dan else dalam kod C atau C++. Penyelesaian ini agak rumit. Apabila if dan else dilaksanakan satu demi satu, seolah-olah pernyataan tanpa if-else telah dilaksanakan. Tetapi di sini kita akan melihat bagaimana untuk melaksanakannya secara berurutan jika wujud. Contoh kod #include<iostream>usingnamespacestd;intmain(){ intx=10;

See all articles