線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1902
推到 Plurk!
推到 Facebook!

請問unsigned short 轉換

尚未結案
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-19 17:24:37 IP:210.202.xxx.xxx 未訂閱
請問各位先進    如何將資料型態int 轉換成 unsigned short , short, unsigned long呢??  
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-19 18:42:21 IP:211.22.xxx.xxx 未訂閱
unsigned short i;
unsigned long j;
int k;    k = 20;    i = (unsigned short)k;
j = (unsigned long)k;
//int 宣告等於 short int;
------------------- 學,然後知不足。 發表人 - stallion 於 2005/07/19 18:45:40
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-20 12:13:04 IP:202.181.xxx.xxx 未訂閱
多謝您的回覆 小弟還有些問題想請教   假設有一函數定義為
int psWrite(
    unsigned long int handle,
    unsigned short ps_key,
    unsigned short store,
    unsigned short ps_length,
    unsigned short * ps
);
我現在要傳一個16進位的數值到psWrite函數中的最後一個參數中(傳到 * ps中) 程式碼如下:
unsigned short data[16] ;  //Define data
for (int i=0;i<8;i++)
    data[i] = (unsigned short)Form1->Edit1->Text.SubString(i*5+1,4).ToInt();    if(psWrite(devHandle, pskey_usr, PS_STORES_I, 2, data )== 1)
{
    // Do Something...
}
在for裡面這樣寫目的是要在Edit1裡面一次取4個值丟入data中 然後再傳入psWrite 可是這樣會有錯誤.. 因為Edit我是要輸入16進制值 所以會有 a~f 的英文字 所以在.ToInt()就會出現錯誤 可是psWrite中的 *ps又定義為unsigned short 這該怎麼餵入?? < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=23565157&CC=527023">
powmien
初階會員


發表:27
回覆:80
積分:41
註冊:2004-10-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-20 12:41:40 IP:60.248.xxx.xxx 未訂閱
引言: 請問各位先進 如何將資料型態int 轉換成 unsigned short , short, unsigned long呢?? < face="Verdana, Arial, Helvetica"> 如果使用机率頻繁的話也可以寫成function。
unsigned short IntToUnsignedShort(int i){
   return (unsigned short)i;
}
......
void main(void){
   int i;
   i=20;
   i=IntToUnsignedShort(i);
}
當然原理跟Stallion 前輩說的一樣。
powmien
初階會員


發表:27
回覆:80
積分:41
註冊:2004-10-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-20 13:13:17 IP:60.248.xxx.xxx 未訂閱
引言: 多謝您的回覆 小弟還有些問題想請教 假設有一函數定義為
int psWrite(
    unsigned long int handle,
    unsigned short ps_key,
    unsigned short store,
    unsigned short ps_length,
    unsigned short * ps
);
我現在要傳一個16進位的數值到psWrite函數中的最後一個參數中(傳到 * ps中) 程式碼如下:
unsigned short data[16] ;  //Define data
for (int i=0;i<8;i++)
    data[i] = (unsigned short)Form1->Edit1->Text.SubString(i*5+1,4).ToInt();    if(psWrite(devHandle, pskey_usr, PS_STORES_I, 2, data )== 1)
{
    // Do Something...
}
在for裡面這樣寫目的是要在Edit1裡面一次取4個值丟入data中 然後再傳入psWrite 可是這樣會有錯誤.. 因為Edit我是要輸入16進制值 所以會有 a~f 的英文字 所以在.ToInt()就會出現錯誤 可是psWrite中的 *ps又定義為unsigned short 這該怎麼餵入?? < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=23565157&CC=527023">
很簡單,你不要一次抓一個字串出來,一次抓一個字元出來,然後自行轉成相等的10進制乘上16的次方再全部累加起來。 手上沒BCB的軟体不能直接測試code 有沒有錯誤,希望你能了解。
int temp,total;
temp=0;
total=0;
for(int i=0;i<4;i++)
{
   if(Form1->Edit1->Text.SubString(i,1)=='f')temp=15;
   if(Form1->Edit1->Text.SubString(i,1)=='e')temp=14;
   if(Form1->Edit1->Text.SubString(i,1)=='d')temp=13;
   if(Form1->Edit1->Text.SubString(i,1)=='c')temp=12;
   if(Form1->Edit1->Text.SubString(i,1)=='b')temp=11;
   if(Form1->Edit1->Text.SubString(i,1)=='a')temp=10;
   if(temp < 10) temp=Form1->Edit1->Text.SubString(i,1)).ToInt();
   // FFFF = F * 16^3 + F* 16^2 + F * 16^1 + F * 16^0 = 65535
   switch(i){case 0: total+=(temp*4096); break;  // MSB  // temp * 16的三次方
             case 1: total+=(temp*256); break;  
             case 2: total+=(temp*16); break;
             case 3: total+=temp; break;         // LSB  // temp * 16的零次方
             default: break;
   }
}
......
data[j] = (unsigned short)total;
發表人 - powmien 於 2005/07/20 13:33:38
系統時間:2024-05-18 6:42:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!