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讀...