下面是我使用的示例代码.净核心6:

using System;

namespace testTerminator
{
    class Program
    {
        static void Main(string[] args)
        {
            // Given an array of bytes:
            byte[] array = {72, 101, 108, 108, 111, 0, 0, 32, 72, 101};
            // Converted to a string:
            string data = System.Text.Encoding.ASCII.GetString(array);
            
            // Why does the following line not return the position
            // of the null characters?
            int terminator = data.IndexOf("\0\0");  // returns 0

            // Output:
            Console.WriteLine("Data is '{0}'", data);
            Console.WriteLine("Found terminator at {0}", terminator);

            // Verify null characters are still in the data string:
            byte[] dataBytes = System.Text.Encoding.ASCII.GetBytes(data);
            for (int i = 0; i<dataBytes.Length; i++){
                Console.Write("{0},", dataBytes[i]);
            }
            Console.WriteLine();
        }
    }
}

这将产生以下输出:

Data is 'Hello He'
Found terminator at 0
72,101,108,108,111,0,0,32,72,101,

当空字符位于位置6时,为什么IndexOf("\0\0")返回零?

推荐答案

As noted由@AndrewS在注释中显示,this is documented by Microsoft.默认值是使用CurrentCulture,如果该区域性中存在被忽略的字符,则返回0.在里面Net 5更改了Unicode库,这影响了此操作.

请注意,您可以在简单的一行代码中复制此内容:

Console.WriteLine("abc\0".IndexOf("\0"));

要解决此问题,需要使用顺序比较

int terminator = data.IndexOf("\0\0", StringComparison.Ordinal);  // returns 0

奇怪的是,当您使用char版本时,它不会这样做

Console.WriteLine("abc\0".IndexOf('\0'));

返回3.这是因为它进行顺序比较by default.

Csharp相关问答推荐

使用GeneratedComInterfaceProperty的.NET 8 COM类对于VB 6/SYS或ALEViewer不可见

为什么xslWriter不总是按照xslWriterSet中指定的格式格式化该文档?

C# uwp中的Win11启动屏幕剪辑工作方式不同

将委托传递到serviceccollection c#web API

如何使用CsvReader获取给定列索引的列标题?

如何阻止注释被包含在C#release build. exe中

使用LayoutKind在C#中嵌套 struct .显式

将XPS转换为PDF C#

限制特定REST API不被访问,但部署代码

在C#中,有没有一种方法可以集中定义跨多个方法使用的XML参数描述符?

共享暂存/生产环境中Azure事件中心的建议配置

Blazor Web App WASM的两个独立项目令人困惑

如何在Cosmos SDK中控制超时、重试和重试之间的延迟?

当试图限制EF Select 的列时,如何避免重复代码?

C#动态设置ServerReport报表参数

我想根据姓氏按字母顺序对包含150行徽章编号、姓氏、名字、地址等的文件进行排序.e

如何解决System.StackOverflowException:抛出System.StackOverflowException类型的异常.&# 39;生成随机代码时发生异常?

如何从SignalR获取连接客户端的域

我应该使用IMhemyCache来存储承载令牌,还是应该为Azure函数中的401个错误实施Polly重试策略?

如何通过WinSCP判断SFTP会话中使用的加密算法?