• .Net C# 的一个bug(暂时命名为Bug)


    见下面函数,是一个写入发送缓冲区队列的函数

    /// <summary>
    /// 发送缓存区
    /// </summary>
    /// <param name="content"></param>
    /// <param name="bufferOffset"></param>
    /// <param name="senderBuffer"></param>
    private void WriteSendBuffer(string content,int bufferOffset, byte[] sendBuffer)
    {
        int byteLength = Encoding.UTF8.GetByteCount(content);
        if (byteLength <= sendBuffer.Length)
        {
            byte[] sendBytes = Encoding.UTF8.GetBytes(content);
            //中午就会错误的  Encoding.UTF8.GetBytes(content, 0, byteLength, senderBuffer, bufferOffset);
            //以上换成数组拷贝就木问题了
            Array.Copy(sendBytes, 0, sendBuffer, bufferOffset, byteLength);  // 拷贝到数据包缓冲区
        }
    }

    注意到UTF8的GetBytes,content里没中文一点问题都没有,如果是ASCII也木问题,但是如果用Unioncode且有中文就直接数组越界,错误信息是:

    索引和计数必须引用该字符串内的位置

    估计这是.Net里面的一个Bug,反正肯定是中文字节没处理好,有分析原理的么?

    好久没写.net 写了点就报这个错,伤不起。

  • 相关阅读:
    Android OpenGL 编写简单滤镜
    linux 文件系统
    此博客不再更新
    golang sync包
    KADEMLIA算法
    golang 类型转换
    golang 小例子
    go-ehtereum编译:
    golang编译库文件方式
    以太坊(Ethereum)智能合约NodeJS/Web3 使用
  • 原文地址:https://www.cnblogs.com/yinpengxiang/p/2740434.html
Copyright © 2020-2023  润新知