C語言怎麼把長位元組資料向短位元組資料轉換

時間 2023-01-28 01:00:08

1樓:匿名使用者

怎樣的長位元組、又怎樣的短位元組。

2樓:陳釗翔

(型別名)變數名 把一個變數強轉為一個型別。

如果要兼顧資料完整問題還要設計相應的演算法。

c語言中將一個位元組資料轉換成對應十進位制數字字串

3樓:秒懂百科

通過格式操作使任意型別的資料轉換成一個字串。

如何用c語言將不足64位元組的資料轉換成64位元組的倍數

4樓:匿名使用者

char* msg; /收到的訊息。

int len = strlen(msg); 訊息長度。

int slen = len % 64 !=0 ? 64 - len % 64 : 0; /當前訊息長度為64整數倍的差值。

char ch = a'; 用來填充多出來位元組的字元。

char* sendmsg = new char[len + slen + 1];

strcpy_s(sendmsg,len+1, msg);

for (int i = len; i !=len + slen; i++)

sendto...傳送sendmsg時,記得將緩衝長度設定為len+slen+1

c語言 如何把一個字串中相連的兩個數字轉化為一個位元組?

5樓:仍夢菲海英

不知道你的意思,但是如果你要把字串「313233343536」,變成數字陣列的話,你可以這樣變化的。

假設*p=「「313233343536」

在定義一個陣列a;

for(i=0;i<12;i++)

這樣就可以轉化成數字陣列了。

c語言中如何將十六進位制轉換成2個位元組輸出

6樓:匿名使用者

s%是輸出字串,並且字串以'\0'結束,char msg[1];是一個字元

看數值的話。

7樓:匿名使用者

msglegth = 0x9001;

如果轉換成char*字串形式,記憶體中儲存是什麼資料呢 例如有可能是 0x00 0x00 0x90 0x01,這樣轉換的字元可能就是 0x00 0x00 這樣肯定列印不出來,即使是0x90,0x01也是不可見字元。

lz希望列印出9001吧。其實先建立個16進位制的表char hex= ;

然後一位一位解析。

例如 int i = 78908 16進位制 0x1343cint j;

第一個位元組。

j = 78908 %16;

可以輸出hex[j];

i = i /16;

以此類推,把前面的字元取出來。

c語言裡面,,這段話怎麼理解啊?

8樓:匿名使用者

理解意思就是。

int 型佔16位,long佔32位情況下當把一個int型資料賦給一個long型變數時,就要進行符號擴充套件,它會把int型資料的16位原封不動送到long型變數的低16位中,然後再按int型資料的正負,擴充套件符號位,如為正,則long型變數的高16位全部填充為0,為負則全填充為1

把一個long型資料賦給一個int型變數時,系統會將long型資料的低16位原封不動送到整型變數,也就是擷取long型的低16位;

總結為一句就是,不同型別之間轉換的時候,都是按照資料在記憶體中的存放形式傳遞的,佔用短的向佔用長的傳遞時就需要進行符號擴充套件。

9樓:匿名使用者

int型和long型的長度不同,但是不管是int還是long,最高位都是符號位。

當int型向long型賦值時,先不考慮符號位,直接將int的所有位數(排除符號位)複製給long中的相應位置,因為long比int長,所以long中沒有被複制的資料(排除符號位)都用0填充。

最後一步,將int的符號位(即最高為)複製到long的符號位(最高為)。

10樓:僑緯

1、上面話的意思已經表達的很清楚,不理解估計是int型、long型的基本定義理解不夠透徹,建議拿出教科書,再研讀一下c中基本型別的定義,這才是從根本上解決問題;

2、 一般,c語言中:int型佔2個位元組,long型佔4個位元組;一個位元組佔8位;這樣int型就是佔16個位元組,long型佔32個位元組;正數符合用0標識,負數用1標識;將int值賦值給long,相當於將小盒子放到大盒子中,等等。看書吧;

11樓:漠影歌

首先,從你這句話中可以判定,int型別是2位元組的,long型別是4位元組的。也就是說int型別是八位,long型別是16位,系統是16位系統。

(這裡不明白可以參考。

然後說符號擴充套件的問題。

在這裡,是小的數向大的數擴充套件,long型別: 0000 0000 0000 0000

int型別: 0000 0000

明顯int型別是偏小的數,在數的強制轉換的時候,會將int的這八位放在long型別的後八位上。比如說 int型別是 0000

1001(也就是9),轉換成long型別是0000 0000 0000

1001(算下來也是9),兩者都是整數型別,不過是位數不一樣。正數的轉換不會變它的值,但是佔用的位元組數不一樣而已。

負數: 首先,我們做一個十進位制負數轉換成二進位制的。

計算機中一般用補碼來表示,若對於補碼有不清楚之處請參考。

負數轉換為二進位制,就是將其相反數(正數)的補碼的每一位變反(1變0,0變1)最後將變完了的數值加1,就完成了負數的補碼運算。這樣就變成了二進位制。

舉個例子:將-1變成二進位制。

①首先確定二進位制的位數,假定為16位,即可以表示-32768到32767的所有十進位制整數。

②將-1的相反數,也就是1表示為二進位制0000 0000 0000 0001(十六進位制表示為0x0001)

(由於四位二進位制可以表示為一位十六進位制,故一般將二進位制按四位進行分段表示)

③將這個二進位制變反,可以得到1111 1111 1111 1110(十六進位制hex表示為0xfffe)

④將變反後的數值加上1,得到-1的二進位制表示1111 1111 1111 1111(十六進位制表示0xffff)

其他在16位二進位制可以表示範圍內的負數均可如此進行計算。

這裡需要注意的是:

①二進位制的位數及其可以表示的十進位制數的範圍。

②二進位制數碼變反加一的過程。

所以高位不再補0,而是補1!

不懂繼續追問!

所以高位不再補0,而是補1!

不懂繼續追問!

12樓:

首先你要知道int資料型別的表示方式,00000000 00000000 16bit, 最高位是符號位 也就是題中描述的高16位,為0時表示正,為1時表示負。然後long資料型別是4byte,也就是32bit,然後也是最高位表示符號位。 假設一個變數 int num_x

如果 int num_x 是正數(高16位為0),賦值給long資料型別時 可以直接複製bit0 ~ bit15。例如 int num_x = 10 轉換後 long new_num = 10. 表示為 0 0000000 00001010

如果 int num_x 是負數 (高16位為1),賦值給long資料型別時,符號也要複製過來。

如 int num_x = 10,那麼轉換後的long new_num 表示為 1 0000000 00000000 00000000 00001010

13樓:

int型,在記憶體中要佔16位(2個位元組),其中最高位是符號位,0代表正值,1代表負值;long型,在記憶體中要佔32位(4個位元組)。int型轉換為long型—即短資料型別轉換為長資料型別(有符號的),c給出的解決辦法是符號位擴充套件機制,並且要保證擴充套件後的數值大小不變。

例如:10int型:0000 0000 0000 1001 擴充套件成long型後是:0000 0000 0000 0000 (高16位全為0,因為符號位是0) 0000 0000 0000 1001

例如:-10

int型:1000 0000 0000 1001 擴充套件成long型後是:1111 1111 1111 1111 (高16位全為1,因為符號位是1) 0000 0000 0000 1001

但如果是無符號數的短資料型別轉換為長資料型別,則是進行零擴充套件,即用零來填充長資料型別的高位元組位。

14樓:善護

所謂的整數符號位擴充套件,就是在將整數轉換成位數更多的整數時,將符號位填補在相差的高位上。如將位元組(8 位二進位制數) 00000001 (十進位制 1)、10000000(十進位制 -128)擴充套件成字(16 位二進位制數) 0 0000001 (十進位制 1)將符號位的 0 填充在字(16 位二進位制數)的高 8 位上,即:00000000 00000001 。

10000000(十進位制 -128)將符號位的 1填充在字(16 位二進位制數)的高 8 位上,即:11111111 10000000 。

15樓:匿名使用者

每個型別的儲存方式不同罷了,

c++中如何進行型別轉換和注意事項

16樓:匿名使用者

其實你只要瞭解一下資料在記憶體中的儲存原理就好了。

長位元組資料轉短位元組時資料會被截斷,這個時候有兩種可能性:

1、如果長位元組資料太大(超過短位元組資料範圍),資料就會失真,比如(double a = 1000000000000, short int b = short int) a; 這個時候 b的值絕對不是 a原來的值,而是0!,而 int c = int) a; 這個時候c的值是「-2147483648」!

2、如果長位元組資料也很小,資料就會保留,比如 double a = 1000; short int b = short int) a; 這個時候 b的值就是 a的值,為1000

短位元組資料轉長位元組資料呢是很安全的,不會發生資料截斷,這也就是傳說中的隱式轉換,由編譯器幫我們完成,當然也可以由你進行強制轉換。

所以呢,結論就是當你要進行型別轉換的時候,一定要明白轉換前後的資料是長位元組還是短位元組,是長位元組轉短位元組的就要小心了。

c語言整型資料int佔幾個位元組

17樓:加百列

不同的編譯器,佔據的位元組也不同,具體如下表所示:

編譯器可以根據自身硬體來選擇合適的大小,但是需要滿足約束:short和int型至少為16位,long型至少為32位,並且short型長度不能超過int型,而int型不能超過long型。這即是說各個型別的變數長度是由編譯器來決定的,而當前主流的編譯器中一般是32位機器和64位機器中int型都是4個位元組。

18樓:匿名使用者

1、16位編譯器。

char :1個位元組。

char*(即指標變數): 2個位元組。

short int : 2個位元組。

int: 2個位元組。

unsigned int : 2個位元組。

float: 4個位元組。

double: 8個位元組。

long: 4個位元組。

long long: 8個位元組。

unsigned long: 4個位元組。

2、32位編譯器。

char :1個位元組。

char*: 4個位元組。

short int : 2個位元組。

int: 4個位元組。

unsigned int : 4個位元組。

float: 4個位元組。

double: 8個位元組。

long: 4個位元組。

long long: 8個位元組。

unsigned long: 4個位元組。

整型資料的一般分類如下:

1、基本型:型別說明符為int,在記憶體中佔2個位元組。

2、短整型:型別說明符為short int或short。所佔位元組和取值範圍均與基本型相同。

3、長整型:型別說明符為long int或long,在記憶體中佔4個位元組。

4、無符號型:型別說明符為unsigned。無符號型又可與上述三種型別匹配而構成:

1)無符號基本型:型別說明符為unsigned int或unsigned。

2)無符號短整型:型別說明符為unsigned short。

3)無符號長整型:型別說明符為unsigned long。

c 位元組數問題

我覺得上面兩樓說得都有些偏差,與lz想要的答案有少少不一樣.我相信lz的程式是執行在32位系統上.如果執行在64位系統上,那麼結果應該是32,而不是16.32系統上,int為4位元組,long為4位元組,然後第9個位元組上開始排第一個char,第10個位元組上排第二個char,直到第14個位元組.而...

在c 中,如何把位元組陣列轉換成字串

馮老師 必果學院 位元組陣列轉化為字串陣列只需要做一個判斷 檢查位元組陣列最後一個位元組是否為0,如果是,則直接複製。否則則需要追加一個為0的位元組到末位。示例 如下 char tostring char data,size t len,char str,size t strlen else ret...

c語言,怎麼用fscanf 把資料讀到動態陣列中

風若遠去何人留 要經過如下幾個步驟 1 開啟檔案。2 建立動態陣列。如果事先可以預知資料總數,或者可以通過開啟的檔案獲取到需要讀取的數量,那麼這一步可以使用已知或讀取到的值來建立動態陣列。否則可以先暫定一個大小,在實際讀取中如出現不足再用realloc函式重新分配。3 格式化讀取資料。用scanf讀...