cocos2d-x与lua数据传输操作之C++版ByteArray

本文介绍如何在C++的cocos2d-x项目中创建一个ByteArray类,以便于在C++和lua之间进行数据传输。由于C++和lua的数据交换需求,作者基于ActionScript3.0的ByteArray实现了一个C++版本,考虑了字节序和不同数据类型之间的转换。代码参考了ActionScript3.0的API,并提供了github链接。
摘要由CSDN通过智能技术生成

以前写过页游ActionScript3.0,里边有个ByteArray类对数据流进行操作,zengrong(博客)实现了lua版本的ByteArray,但由于自己项目网络socket通信内核都写在了C++端,而游戏UI逻辑等则写在了LUA端,这就涉及到了LUA与C++之间的数据传递,故自己写了C++版本的ByteArray类导出给lua使用。

先简单说下原理,由于字节int、short等在内存中都可以用char表示,一个int等于4个char,之间可以相互转化;另字节序有大端小端之分,通常x86架构下用的都是小端little endian。

下面是代码,与ActionScript3.0中ByteArray类似

//
//  ByteArray.hpp
//  GameProject
//
//  Created by jt on 15-09-04.
//
//

#ifndef __JT_BYTEARRAY_H_
#define __JT_BYTEARRAY_H_


#include "cocos2d.h"
USING_NS_CC;


#include <string>
using namespace std;


/**
 * C++版ByteArray
 **/
class ByteArray : public Ref
{
public:
    static ByteArray* create(int len,int endian = ENDIAN_LITTLE);
    
    //C++中创建使用,不导出至LUA
    static ByteArray* createWithBuffer(char* buffer,int len,int endian = ENDIAN_LITTLE);
    
    static int checkCPUEndian();
    
    static const int ENDIAN_LITTLE = 0;
    static const int ENDIAN_BIG = 1;
    
    bool readBool();
    void writeBool(bool value);
    
    short readShort();
    void writeShort(short value);
    
    unsigned short readUnsignedShort();
    void writeUnsignedShort(unsigned short value);
    
    int readInt();
    void writeInt(int value);
    
    /**
     * 从字节流中读取一个无符号的 32 位整数。
     * 32位系统下int与long同4字节
     **/
    unsigned int readUnsignedInt();
    void writeUnsignedInt(unsigned int value);
    
    long long readLongLong();
    void writeLongLong(long long value);
    
    string readString(int len);
    void writeString(string value);
    
    char readByte();
    void writeByte(char value);
    
    unsigned char readUnsignedByte();
    void writ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值