第二坑

紧接下来,就是字符串转换,我觉得这个倒算个工具函数


void string2wstring( std::wstring & dest, const std::string &src )
{
 dest.resize( src.size() );
 for( std::string::size_type i = 0; i < src.size(); i++ )
  dest[i]      = static_cast<unsigned char> ( src[i] );
}

char * string2hlaStringBytes( const std::wstring& s, unsigned int &retlen )
{
 const unsigned int slen  = s.size();

 unsigned char  sizeBytes[4];
 sizeBytes[3]     = ( unsigned char ) ( ( slen & 0x000000FF ) >> 0 );
 sizeBytes[2]     = ( unsigned char ) ( ( slen & 0x0000FF00 ) >> 8 );
 sizeBytes[1]     = ( unsigned char ) ( ( slen & 0x00FF0000 ) >> 16 );
 sizeBytes[0]     = ( unsigned char ) ( ( slen & 0xFF000000 ) >> 24 );

 unsigned char *  characters = new unsigned char[slen * 2];
 for( int i = 0; i < slen; i++ )
 {
  unsigned short v   = s.at( i );
  characters[i*2]    = ( unsigned char ) ( ( v & 0xFF00 ) >> 8 );
  characters[i*2+1]   = ( unsigned char ) ( ( v & 0x00FF ) >> 0 );
 }

 int   nofXtraUnicodes  = slen % 2;
 unsigned int hlaStringBytesLen = 4 + slen * 2 + nofXtraUnicodes;
 char * hlaStringBytes  = new char[hlaStringBytesLen];

 for( int k = 0; k < 4; k++ )
 {
  hlaStringBytes[k]   = sizeBytes[k];
 }

 for( int n = 0; n < slen * 2; n++ )
 {
  hlaStringBytes[n+4]   = characters[n];
 }

 for( int m = 0; m < nofXtraUnicodes * 2; m++ )
 {
  hlaStringBytes[4+2*slen+m] = 0;
 }
 retlen       = hlaStringBytesLen;

 delete characters;
 return hlaStringBytes;

}

std::wstring hlaStringBytes2string( const char * hlaStringBytes )
{
 unsigned int hlaStringSize  = hlaStringBytes[3] +
  ( ( unsigned int ) hlaStringBytes[2] << 8 ) +
  ( ( unsigned int ) hlaStringBytes[1] << 16 ) +
  ( ( unsigned int ) hlaStringBytes[0] << 24 );

 wchar_t * textChars    = new wchar_t[hlaStringSize+1];
 textChars[hlaStringSize]  = ( wchar_t ) L'\0';
 for( int i = 0; i < hlaStringSize; i++ )
 {
  unsigned int hi   = ( unsigned char ) hlaStringBytes[4+i*2];
  unsigned int lo   = ( unsigned char ) hlaStringBytes[4*+i*2+1];
  wchar_t   c   = ( ( hi << 8 ) + ( lo << 0 ) );
  textChars[i]    = c;
 }
 std::wstring decodedString( textChars );

 delete [] textChars;
 return decodedString;
}


再往下,用到了基类BaseFederateAmbassador


class ChatCCFederate : public BaseFederateAmbassador
{
public:
 ChatCCFederate()
 {
 }
 
};

而BaseFederateAmbassador类派生自基类RTI:: FederateAmbassador

using namespace RTI;

class RTI_EXPORT BaseFederateAmbassador : public FederateAmbassador
{
};

类里面具体定义了对于联邦管理等各项内容(虽然在本例子中都为空),应该是联邦成员类。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值