專案需求呼叫元件輸入引數是char[ ]型別,實際輸入資料是byte[ ]型別(實際上是8個位元組流),即0~255,因此使用unsigned char。賦值用的是sprintf方法,要求使用const char*,所以做了強制型別轉換,但發現轉換的結果并不是我想要的,被轉成了漢字字串,而且似乎不是unsigned,也只有1個漢字,是4位元組或2位元組?也少了。我用C++真的不會,求指點。謝謝
一下是代碼。
unsigned char temp[8];
unsigned char newIP[4]={192,168,0,111};
int newCmdPort=3000;
int newImgPort=4001;
temp[0]=newIP[0];
temp[1]=newIP[1];
temp[2]=newIP[2];
temp[3]=newIP[3];
temp[4]=(char)(newCmdPort/256);
temp[5]=(char)(newCmdPort%256);
temp[6]=(char)(newImgPort/256);
temp[7]=(char)(newImgPort%256);
const char* cIp = (const char*)(unsigned char*)temp;
sprintf(para.ipRemoteChange,cIp);
uj5u.com熱心網友回復:
問題有了變化,用如下代碼實作了引數輸入元件,但又有了新的問題,para.ipRemoteChange(char[ ]型別)需要轉換成char*,應該如何轉換?unsigned char 如何轉換為char*?unsigned char temp[8];
unsigned char newIP[4]={192,168,0,111};
int newCmdPort=3000;
int newImgPort=4001;
temp[0]=newIP[0];
temp[1]=newIP[1];
temp[2]=newIP[2];
temp[3]=newIP[3];
temp[4]=(char)(newCmdPort/256);
temp[5]=(char)(newCmdPort%256);
temp[6]=(char)(newImgPort/256);
temp[7]=(char)(newImgPort%256);
//const char* cIp = (const char*)(unsigned char*)temp;
//strcpy(para.ipRemoteChange,cIp);
//sprintf(para.ipRemoteChange,cIp);
for(int i=0;i<8;i++)
{
para.ipRemoteChange[i]=temp[i];
}
uj5u.com熱心網友回復:
不用轉換,直接賦值會自動轉換的。uj5u.com熱心網友回復:
有比較方便的memcpy,不建議用這種回圈賦值:
memcpy(ipRemoteChange, temp, 8);
uj5u.com熱心網友回復:
para.ipRemoteChange((char *)pa)uj5u.com熱心網友回復:
謝謝大家的回復,現在的問題是para.ipRemoteChange[ ]型別定義為unsigned char[ ] 時輸入是正確的,我需要UDP發送para.ipRemoteChange[ ],之前使用的sendto()方法,只能發送const char*,因此總想著把 para.ipRemoteChange[ ]轉換成const char*,可能由于他是byte(大于127的),轉換的結果不對。現在我想用UDP直接發送byte[ ],應該用什么方法?uj5u.com熱心網友回復:
賦值不要用sprintf,sprintf是處理字串的,遇到0回截斷,處理char和unsigned char只需要注意這一個問題uj5u.com熱心網友回復:
非常感謝。您能說的再明確一些嗎,應該用什么方法賦值呢
uj5u.com熱心網友回復:
sendto(sock, (char*)para.ipRemoteChange,...........試試這樣
uj5u.com熱心網友回復:
#include <windows.h>
void xxxx()
{
BYTE newIP[4]={192,168,0,111};
WORD newCmdPort=3000;
WORD newImgPort=4001;
//
const BYTE temp[8]={newIP[0],newIP[1],newIP[2],newIP[3],
LOBYTE(newCmdPort),
HIBYTE(newCmdPort),
LOBYTE(newImgPort),
HIBYTE(newImgPort)};
}
uj5u.com熱心網友回復:
memcpyuj5u.com熱心網友回復:
const BYTE temp[8] 必須使用 初始化 陳述句, 不能 定義后 再 賦值 (const BYTE !)轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/69978.html
標籤:基礎類
上一篇:vc撰寫人機互動界面
