将 int 转换为 char 的最快方法是什么

What is the fastest way to convert int to char

将 int 转换为 char 的最快方法是什么? 我需要一种更快的方法,因为

convertingchar = Convert.ToChar(intvalue);

是我在节目中最慢的部分。 我有多个不同的 int 值,必须将其转换为 char。 我的项目很大,我无法 post 我的功能。这就是为什么我 post 这个测试函数。

到目前为止我的代码。

char convertingchar = ' ';
...some code...
public void convert(int intvalue){
   convertingchar = Convert.ToChar(intvalue);
}

Convert.ToChar 最终执行显式转换为 (char)value,其中值是您的 int 值。在这样做之前,它会检查以确保值在 0 to 0xffff 范围内,如果不在范围内则抛出 OverflowException。额外的方法调用、value/boundary 检查和 OverflowException 可能有用,但如果没有,如果只使用 (char)value.

性能会更好

这将确保转换时一切正常,但需要一些时间来确保这一点,

convertingchar = Convert.ToChar(intvalue);

这将在不确保一切正常的情况下转换它,所以时间更少,

convertingchar = (char)intvalue;

例如

 Console.WriteLine("(char)122 is {0}", (char)122);

产量:

(char)122 is z


注意

与问题没有直接关系,但如果您觉得转换速度很慢,那么您可能做错了什么。问题是为什么需要把int的地段转成char。你想要达到的目标。可能有更好的方法。

运行 quick performance test 在你的 Convert.ToChar 方法和提到的铸造方法之间,我发现 65535 次测试 (char.MaxValue):

Convert: 00:00:00.0005447 total
Cast:    00:00:00.0003663 total

在最好的情况下,演员表对我来说是 运行 大约一半的转换时间。

Reference Source 中发现的 Convert.ToChar 的实现揭示了时间消耗者:

public static char ToChar(int value) {
    if (value < 0 || value > Char.MaxValue) throw new OverflowException(Environment.GetResourceString("Overflow_Char"));
    Contract.EndContractBlock();
    return (char)value;
}

虽然这些检查确实有用,但您的特定用例,尤其是在这种性能关键的情况下,可能不需要它们。由你决定。

执行这些检查的一个很好的替代方法是使用 ushort 而不是 int。显然,这可能会或可能不会实现,但具有相同的最大值,这意味着您将在编译时检查您之前依赖 ToChar 执行的内容。

与其他人指出的相反,最快的方法是根本不 运行 任何代码。在所有其他情况下,为 int 分配了内存,为 char 分配了内存。因此,最好的办法就是将 int 复制到 char 地址。

但是这段代码快了 100%,因为根本没有代码是 运行。

[StructLayout(LayoutKind.Explicit)]
public struct Foo
{
    [FieldOffset(0)] 
    public int Integer;
    [FieldOffset(0)] 
    public char Char;
}

https://msdn.microsoft.com/en-us/library/aa288471%28v=vs.71%29.aspx