AMF_Encode

来源:互联网 发布:sql删除重复 编辑:程序博客网 时间:2024/06/11 01:00
enc = AMF_EncodeString(enc, pend, &av_createStream);enc = AMF_EncodeNumber(enc, pend, ++r->m_numInvokes);
</pre><pre name="code" class="cpp">//======================================================================typedef struct AVal{    char *av_val;    int av_len;} AVal;//======================================================================
char * AMF_EncodeString(char *output, char *outend, const AVal *bv){    if(bv->av_len < 65536 && output + 1 + 2 + bv->av_len > outend) return NULL;    if(output + 1 + 4 + bv->av_len > outend) return NULL;    if(bv->av_len<65536)    {        *output++ = AMF_STRING;        output = AMF_EncodeInt16(output, outend, bv->av_len);    }    else    {        *output++ = AMF_LONG_STRING;        output = AMF_EncodeInt32(output, outend, bv->av_len);    }    memcpy(output, bv->av_val, bv->av_len);    output += bv->av_len;    return output;}
//======================================================================
char* AMF_EncodeNumber(char *output, char *outend, double dVal){    if(output + 1 + 8 > outend) return NULL;    *output++=AMF_NUMBER; //type: Number#if __FLOAT_WORD_ORDER == __BYTE_ORDER //#define __FLOAT_WORD_ORDER __BYTE_ORDER    #if __BYTE_ORDER == __BIG_ENDIAN        memcpy(output,&dVal,8);    #elif __BYTE_ORDER == __LITTLE_ENDIAN //#define __BYTE_ORDER __LITTLE_ENDIAN{unsigned char *ci, *co;ci = (unsigned char*)&dVal;co = (unsigned char*)output;co[0]=ci[7];co[1]=ci[6];co[2]=ci[5];co[3]=ci[4];co[4]=ci[3];co[5]=ci[2];co[6]=ci[1];co[7]=ci[0];}    #endif#else    //......#endifreturn output + 8;}
0 0
原创粉丝点击