繁体   English   中英

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

[英]What is the fastest way to convert int to char

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

convertingchar = Convert.ToChar(intvalue);

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

到目前为止,我的代码。

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

在您的Convert.ToChar方法和上述转换方法之间进行快速性能测试 ,我发现65535测试( char.MaxValue ):

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

在最佳状态下,cast在大约一半的转换时间内为我运行。

参考源中提供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的性能。

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

这样可以确保转换时一切正常,但要花一些时间,

convertingchar = Convert.ToChar(intvalue);

这将在不确保一切正常的情况下进行转换,从而减少了时间,

convertingchar = (char)intvalue;

例如。

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

产量:

(char)122是z


注意

与问题没有直接关系,但是如果您认为转换速度很慢,则可能是做错了什么。 问题是为什么您需要将很多int转换为char 您正在尝试实现的目标。 可能有更好的方法。

与其他人所指出的相反,最快的方法是根本不运行任何代码。 在所有其他情况下,都为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/zh-cn/library/aa288471%28v=vs.71%29.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM