添加部分常用API。 添加 newlife rpc 通讯。
JiuHuan 编写于 2024-08-16 10:56:23
microCLib
import java.util.Arrays;

public class ArrayHelper
{
    /**
     * 搜索子数组
     * @param src 源数组
     * @param sub 搜索内容
     * @param offset 搜索起始位置
     * @return 返回索引
     */
    public static int IndexOf(byte[] src,byte[] sub,int offset)
    {
        if(src == null)return  -1;
        if(sub == null)return  -1;
        if(src.length < sub.length)return  -1;
        if(sub.length < 1)return  -1;
        if(offset<0)return  -1;
        if(offset+sub.length > src.length)return  -1;

        int i,j;

        int maxidx = src.length - sub.length + 1;

        for (i = offset;i<maxidx;i++)
        {
            if(sub[0] == src[i])
            {
                for (j = 1;j<sub.length;j++)
                {
                    if(sub[j]!=src[i+j])break;
                }
                if(j == sub.length)return i;
            }
        }

        return -1;
    }

    /**
     * 搜索字节
     * @param src 源数组
     * @param value 值
     * @param offset 搜索起始位置
     * @return 返回索引
     */
    public static int IndexOf(byte[] src,byte value,int offset)
    {
        if(src == null)return  -1;
        if(offset<0)return  -1;

        for (int i = offset;i<src.length;i++)
        {
            if(value == src[i])
            {
                return i;
            }
        }

        return -1;
    }

    /**
     * 按照C语言格式,读取一个字符串。c字符串约定,以0x00结尾
     * @param src 源数组
     * @param offset 位置
     * @return 返回字符串
     */
    public static String GetCString(byte[] src,int offset)
    {
        int end = IndexOf(src,(byte)0x00,offset);
        if(end < 0)return  "";
        var len = end-offset;

        if(len == 0)return "";

        // System.out.printf("src %d\r\n",src.length);
        // System.out.printf("GetCString offset %d,end %d,len %d\r\n",offset,end,end - offset);
        var sub = Arrays.copyOfRange(src,offset,end);

        var str = new String(sub);
        // System.out.printf("sub %s len %d\r\n",str, str.length());
        return  str;
    }
}