簡體   English   中英

給定一個數字和一個長度,在 C# 中以一種高性能的方式在該 int 前面加上 (length - number.count) 0

[英]Given a number and a length, prepend (length - number.count) 0s to that int in a performant manner in C#

我正在嘗試創建一個輔助函數,該函數將 x 數量的零添加到整數,其中 x 是給定長度與該 int 中的字符數之間的差值。

例如:

     // data = 9573132375
     // length = 15
     // should return (15 - 10) 000009573132375
     public string ModulateData(long data, int length)
     {
        if (data.ToString().Length <= length)
        {
            int noToPrepend = length - data.ToString().Length;
            string leadingzeros = "";
            for (int i = 0; i < noToPrepend; i++)
            {
                leadingzeros += "0";
            }

            return leadingzeros + data.ToString();
        } 
        return "";
     }

我只能想到將數據變量轉換為字符串,在前面加上 0,然后再將字符串轉換回整數。 但是,我擔心這種方法的性能,因為這種方法將成為我核心設計的一部分,它需要盡可能提高性能。 有沒有更快的方法可以做到這一點? 我當前的代碼是否有任何性能損失?

編輯我將數據變量作為請求數據傳遞給接受字節的機器,所以我將使用這個函數如下 -

string requestdata = "";
requestdata += ModulateData(x,20);
requestdata += ModulateData(y,5);
requestdata += ModulateData(z,10); // Could be about 20 or so lines like this.

之后,我會將 requestdata 轉換為十六進制格式的字節數組。 我已經有了工作代碼。

較短的版本:

public static string ModulateData(long data, int length) =>
            (data.ToString().Length <= length)
                ? $"{new string('0', length - data.ToString().Length)}{data}"
                : string.Empty;

如果需要,還有更多可調試的版本:

public static string ModulateData(long data, int length)
{
    var dataAsText = data.ToString();

    if (dataAsText.Length <= length)
    {
        int noToPrepend = length - dataAsText.Length;
        var leadingZeros = new string('0', noToPrepend);

        return $"{leadingZeros}{dataAsText}";
    }

    return string.Empty;
}

還有一個用法:

// to make this more optimal you can calculate the StringBuilder initial capacity here, 
// by taking into account possible characters length output
var requestData = new StringBuilder(); 

requestData.Append(ModulateData(x, 20));
requestData.Append(ModulateData(y, 5));
requestData.Append(ModulateData(z, 10));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM