Как преобразовать char [] в строку без получения странных результатов (странных знаков в строке)? - PullRequest
0 голосов
/ 21 июня 2020

Как сказано в заголовке, когда я конвертирую char[] в строку, я получаю странную строку. Я читал, что это происходит из-за того, что длина строк не равна количеству полученных байтов. но я не знаю, как это исправить. вот что я сделал, пробовал несколько способов

class Time
{
    private int hour;
    private int min;
    private int sec;
    public Time(int h,int m,int s)
    {
        this.hour = h;
        this.min = m;
        this.sec = s;
    }
    public int GetHour()
    {
        return this.hour;
    }
    public int GetMin()
    {
        return this.min;
    }
    public int GetSec()
    {
        return this.sec;
    }
    public double GetTimeDiff(Time t)
    {
        double hour = Math.Abs(this.hour - t.GetHour())*60;
            double min = Math.Abs(this.min - t.GetMin());
            double sec=((double)(Math.Abs(this.sec-t.GetSec())))/60.0;
            return min + sec+hour;         
    }  
    public Time GetCurrentTime()
    {
        return new Time(this.hour, this.min, this.sec);
    }
    public override string ToString()
    {
        char[] arr = new char[8];
    
       arr= "00:00:00".ToArray();
        
        if (this.hour >= 10)
        {
            arr[0] = (char)(this.hour / 10);
            arr[1] = (char)(this.hour % 10);
        }
        else
        {
            arr[1] = (char)(this.hour);
        }
        if (this.min >= 10)
        {
            arr[3] = (char)(this.min / 10);
            arr[4] = (char)(this.min % 10);
        }
        else
        {
            arr[4] = (char)(this.min);
        }
        if (this.sec >= 10)
        {
            arr[6] = (char)(this.sec / 10);
            arr[7] = (char)(this.sec % 10);
        }
        else
        {
            arr[7] = (char)(this.sec);
        }
        string str = "";
        for (int i = 0; i < arr.Length; i++)
        {
            str += arr[i].ToString();
        }
        return str;
    }  
}

Ответы [ 3 ]

0 голосов
/ 21 июня 2020
private string ArrayToString(char[] arr)
{
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
return enc.GetString(arr);
}

Возможно использовать кодировку по умолчанию в windows вместо ASCII

0 голосов
/ 21 июня 2020

Весь ваш временной класс уже существует в структуре как DateTime. Он поддерживает часы, минуты, секунды и миллисекунды, он может участвовать в математических операциях и форматировать себя в соответствии с любой строкой формата. Нет необходимости изобретать это колесо. Вы также можете взглянуть на TimeSpan; другой класс фреймворка, который представляет период времени и также поддерживает множество операций. DateTime предназначен для представления момента времени, TimeSpan представляет собой период времени. Используйте то, что больше подходит для ваших нужд

0 голосов
/ 21 июня 2020

вы можете сделать это вместо (char)(this.hour / 10)

(this.hour / 10).ToString()[0] 

Или сделайте это.

(char)(this.hour/10 + 48)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...