я наткнулся на этом методе, который должен сделать основу преобразование из 10 базы в радиксе основания, так, например, если я прохожу 28, 16 он должен вернуть 1c, который является шестнадцатеричным представлением десятичного 28C# базовый конвертер
private static string convertTo(long value, int radix)
{
char[] alphabet = "abcdefghijklmnopqrstuv".ToCharArray();
string result = "";
if (value < radix) {
return alphabet[value].ToString();
}
long index;
while (value != 0)
{
index = value % radix;
value = Convert.ToInt64(Math.Floor(value/radix));
result += alphabet[index].ToString();
}
return result;
}
Я переписывание той части программы в PHP.
Читая код, приведенный выше, и предсказания выхода вручную, она возвращает c1, где он должен возвращать 1c для 28, 16
Мой вывод заключается в том, что этот метод возвращает перевернутое представление строки в данной базе, c1 вместо правильного 1c
Поскольку у меня нет компилятора C#, я не смог проверить мои выводы.
Так вот мои два вопроса:
- ли мои расчеты правильно, что указанный выше способ calld с 28, 16 возвращается c1?
- Я полагаю, символы (цифры/алфавиты), в любом основании, написано так, что базовые показатели уменьшаются на 1 , как мы идем слева написать, так, например, в десятичной представления означают 300
(3 * 10^2)
+ 10(1 * 10^1)
+ 2(2 * 10^0)
.. это абсолютновсегда правильный?
@GeraldSchneider правильно, и это перевернутый c1 (который, я считаю, является возвратом этого метода выше). Если это все правильно, я бы использовал strrev (base_convert (28, 10, 16)) для достижения этого эффекта. но я не уверен в своих выводах, и это вопрос :) – rahmanisback
Существует несколько бесплатных компиляторов C#, включая Visual Studio Community. Что мешает вам проверить это? – Jeff
@Jeff У меня нет Windows, и я не могу использовать VS. И без VS мне придется обернуть эту функцию в классе, чтобы проверить ее, но у меня нет этого навыка с C#. – rahmanisback