C中,int型資料位址強制轉換成char型再列印出來為什麼是反向的

2021-04-01 16:10:32 字數 4665 閱讀 1923

1樓:匿名使用者

舉個例子來說吧,假設32位整型int a=0x56781234; 而&a=0x80000000,則記憶體中的位元組儲存順序是:

0x80000000 0x04

0x80000001 0x03

0x80000002 0x02

0x80000003 0x01

0x80000004 0x08

0x80000001 0x07

0x80000002 0x06

0x80000003 0x05

即低位位元組儲存在前,以8個位元組為乙個32位整型單位,這叫little endian式儲存方式。

字串定址是按照位元組單位順序訪問的。

如果上述變數a你要輸出12345678的ascii碼順序,你可以:int a=0x87654321;

一般pc用的cpu採用little endian方式儲存資料,但有的cpu採用big endian方式,那樣你就可以採取int a=0x12345678;了。

2樓:匿名使用者

這是指在記憶體中的排序方式。計算機分為大端排序,小端排序的。

小端排序是指:低位在低位址端。

大端排序:高位在低位址端。

3樓:周生

因為你的機器是小端機器

c++輸入乙個char字元,將字元強制型別轉換為int型,為什麼輸出的會是它的ascii碼

4樓:

1.你說的是ascii碼吧2.輸入字元轉化為ascii是什麼意思?ascii碼本身就是一系列字元,你說的是ascii碼值麼?3.要將ascii碼進行哪種運算後輸出?

提示一下,單個ascii字元是可以強制轉換為int的。

5樓:我愛李春霞

當然是這樣的,因為你把字元變數a轉換為了整型,也當然就是她所對應的

ascii碼了

c++中的int和char之間的轉換問題

6樓:

這要用到ascii碼的知識,粗略講一下

字元'0'的ascii碼為

48,然後是'1' '2' '3' ... '9'

字元' '(空格)的ascii碼為32.

字元'a'的ascii碼為65,然後是'b' 'c' ... 'z'

字元'a'的ascii碼為97,然後是'b' 'c' ... 'z'

所以,把乙個數字字元ch,轉為乙個整數,就是ch-'0'當然ch-48也行

因為c和c++中,字元和整型是一樣的,可以隱式轉換

7樓:匿名使用者

int型和char型的長度不一樣。int佔4個位元組而char只佔乙個位元組(大小視系統而定的),所以char轉int沒問題,反過來就可能出錯了

字母有對應的的ascii碼,所以a = b - '0'就是通過ascii碼轉換為數字的

int型也可以直接賦值給char型,同樣是按照ascii碼來的,但由於int長度比char長,因此超過範圍則轉換出來的值可能是不定的(根據編譯器不同而不同),所以一般最好不要這麼轉換

8樓:匿名使用者

目前絕大多數編譯器,int 型資料佔 4 位元組, char 型佔 1 位元組。進行不同資料的強制轉換其實就是資料占用位元組擴充或者截斷。

比如int a;

char b;

a=(int)b;

b=(char)a;

由 b 轉換成 int 型資料就是將 b 擴充 3 個位元組;而將 a 轉換成 char 型資料就是將 a 的最低位位元組擷取出來。因此,將資料由值域較寬型別強制轉換到值域較窄型別時,有可能出現資料資訊丟失。

你說的轉換錯誤其實不然,因為 char 型資料在機器裡通過 ascii 碼儲存,也就是用乙個整數儲存的。譬如字元 ' 0 ',對應的 ascii 碼的十進位制數 是 48,因此強制轉換成 int 後,是 48,而不是 0 。要想將字元 '0' 轉換成整數 '0',就要使用你所說的 a = b - '0'; 或者 a = b - 48; 。

9樓:牽牛散步

第一,int型和char型的長度不一樣。int佔4個位元組而char只佔乙個位元組。

第二,char型可以直接賦值給int型,值的大小是char字元對應的ascii碼值,例如: b = 'a'; a = b; 則a的值應該是97。

第三,int型也可以直接賦值給char型,同樣是按照ascii碼來的,但由於int長度比char長,因此只有在int的值處在ascii碼範圍內的時候轉換後的值才是有意義的,如果超過範圍則轉換出來的值可能是不定的(根據編譯器不同而不同),在vc6下是0

10樓:

首先你要清楚,在c++中int型佔4個位元組,而char型別

只佔1個位元組,char型別是可以轉化為int型別的,但int型別不一定可以轉換為char型別。

我對你這個問題的理解是,你想將0到9之間的數字轉化為char型別的,或是將'0'-'9'之間的字元轉化為int型的數字。

你如果要用強制轉換的話可以這樣:(0的ascii碼是48)

int a;

char b;

a=(int)(b-48);或b=(char)(a+48);

//這樣轉化的前提是a的範圍是0-9,b的範圍是'0'-'9'

在實際運用中,在整型和字元型之間轉化用得較多的應該要算int型與char *型別之間的轉化了。這個時候可以用atoi(字元型轉整型,可以分開理解a to i)和itoa(整型轉字元型,i to a),如:

int a=11111

char* b="33333";

a=atoi(b);//將整型轉化為字串

或itoa(a,b,10);//將字串轉化為整型,最後乙個引數是進製,在這裡是10進製

11樓:匿名使用者

a=b-'0' 得到的數字是 0和b 兩個字母的機器**的差別, 不是數學意義上的數字.

另外int是兩個byte, char是乙個. 也無法直接轉換.

想轉換字母和數字的話你可以試試系統程式 ctoi() 和 itoc()

12樓:徐良軍

在c++中,int轉換為char稱為隱式轉換,char轉換為int稱為顯式轉換。隱式轉換可直接轉換,顯示轉換則要強制性轉換,故b=a,可直接賦值,強制性轉換則要指明轉換型別,如:a=(int)b;

13樓:匿名使用者

轉換其實是對應的ascii碼來顯示的。比如char c=『a』; int i= c;

那麼i=65;是a對應的ascii碼。又比如 c = char(65);那麼c就是a;

14樓:踏岸尋柳

直接賦值即可,無須轉換。

在c++中char型別的陣列裡邊裝的是數字,如何轉換為int型別?

15樓:會飛的小兔子

cha和rint陣列轉換,例:

inti[2]=

charc[2]=

兩者轉換**:

inta[2]=;

charc[2];

for(inti=0;i<2;i++)c[i]=a[i];

int是將乙個數值向下取整為最接近的整數的函式,為取整函式。

擴充套件資料char*、string、cstring這三種字串型別各有各的優點,比如cstring比較靈活,是基於mfc常用的型別,安全性也最高,但可移植性最差。string是使用stl時必不可少的型別,所以是做工程時必須熟練掌握的;char*是從學習c語言開始就已經和我們形影不離的了,有許多api都是以char*作為引數輸入的。

char*型別:是字元指標,在一定條件下等同於字元陣列,如果字元陣列的最後元素是"\0",則是乙個c風格的字串。

16樓:匿名使用者

在標頭檔案中新增

#include

#include

void main()

{char *s;

int n;

s="1234";

n=atoi(s);

cout<:1234

標頭檔案中新增#include

用 x=atof(s)可轉化為double型,用(float)x可轉為float型

17樓:匿名使用者

#include

void main()

//用int()也可以換的方便

18樓:匿名使用者

char str="10";

int num=strtol(str,null,10);

其中,把10換成16可以

獲得16進製制數(即num=16),換成其他數字,可以獲得其他進製的數(如換成8的話,n=8)

19樓:匿名使用者

#include

#include

#include

using namespace std;

template

t lexical_cast(u u)

int main()

20樓:匿名使用者

char dd[n];//設陣列的長度是nint ee[n];

for(int i=0;i

C語言中long型轉換成float型怎麼轉換,假如數字較大時

在c語言中,long 型在32位下,長度為4位元組,表示範圍為 2147483648 2147483647 在64位下為8位元組,範圍為 9223372036854775808 9223372036854775807 也就是9.2e18 而float 範圍是 3.4e 38 和 3.4e 38 明顯...

在c中怎麼講double類強制轉換int型別

double c 10.1 int a int c 10 方式方法有很多 只要意識到一點,當大型別轉換成小型別都有可能出錯,只需要型別一致 就可以進行運算了 int a convert.toint32 c 1.0 double c 10.00 int b int c c 中怎麼把double型別轉換...

C如何將列舉類(enum 型轉換成字元(string 型別

我來解答你問題吧,這個enum 是遊離於class 之外的型別,所以它有著與 在class 之內型別本質的區別,它是使用者自定義的,所以不像 string 需要加 號 像char 需要加 號 舉個例子,定義enum 時 可以直接這樣寫enum e 它有兩個值,預設顯示它本身,但如果在它後面加個 1 ...