2012-06-18 2 views
2

В настоящее время я пытаюсь преобразовать .NET JSON Encoder в NETMF, но столкнулся с проблемой Convert.ToString(), поскольку в NETMF этого не происходит.Преобразование int32 в строку в базе 16

Оригинальная линия датчика выглядит следующим образом:

Convert.ToString(codepoint, 16); 

И после того, глядя на документацию для Convert.ToString(Int32, Int32) он говорит, что для преобразования int32 в INT 2, 8, 10 или 16, обеспечивая ИНТАС первый параметр и основание как второй.

Что такое код низкого уровня, как это сделать или как я могу это сделать?

Как вы можете видеть из кода, мне нужно преобразовать только Int32 в Int16.

EDIT

Ах, кодер также то хочет сделать:

PadLeft(4, '0'); 

на струне, это просто добавление 4 '0' + '0' + '0' + ' 0 'до начала строки?

+0

Может ли я что-то сделать с Convert.toInt16 (строка s), как в свою очередь, мой код в строку с codepoint.ToString(), а затем использовать Convert.ToInt16 (codepoint)? –

+1

Заполнение условно добавляет '' 0'' к началу строки, так что общая длина строки всегда равна значению '4' или больше. – NominSim

+0

Что вы имеете в виду с 'Как вы можете видеть из кода мне нужно преобразовать только из Int32 в Int16.«Насколько я могу видеть, это связано с преобразованием int в базовое 16-строчное представление, такое как' 31' => '' 1F "', а не 'int16 j = (int16) i32'; –

ответ

3

Если вы имеете в виду вы хотите изменить 32-битное целое значение в строку, которая показывает значение в hexadecimal:

string hex = intValue.ToString("x"); 

Для вариантов, пожалуйста, см Stack Overflow   вопрос Convert a number into the hex value in .NET.

Отказ от ответственности: Я не уверен, существует ли эта функция в NETMF, но она настолько фундаментальна, что я думаю, что она должна.

+1

Per [Expert .NET Micro Framework] (http://www.windowsfordevices.com/files/misc/Kuhner.NETMicroFramework_Ch4_sample.pdf#page=20): «.NET Micro Framework не дает вам возможности конвертировать [ чисел в шестнадцатеричном формате], используя формат «X» с помощью метода «ToString». [Doing so] приведет к 'ArgumentException'.» – Douglas

+0

Удивительно, поскольку он поддерживает другие методы ToString(), которые были бы более сложными, например DateTime.ToString() – cdkMoose

+0

Глядя на этот комментарий кода: https://github.com /netmf/netmf-interpreter/blob/dev/Framework/Subset_of_CorLib/System/Number.cs#L108-L1115, похоже, что последняя μ-F/W поддерживает форматы 'x' и' X'. –

2

Вот некоторые примеры кода для преобразования целого числа в шестнадцатеричной системе (основание 16):

int num = 48764; // assign your number 

// Generate hexadecimal number in reverse. 
var sb = new StringBuilder(); 
do 
{ 
    sb.Append(hexChars[num & 15]); 
    num >>= 4; 
} 
while (num > 0); 

// Pad with leading 0s for a minimum length of 4 characters. 
while (sb.Length < 4) 
    sb.Append('0'); 

// Reverse string and get result. 
char[] chars = new char[sb.Length]; 
sb.CopyTo(0, chars, 0, sb.Length); 
Array.Reverse(chars); 
string result = new string(chars); 

PadLeft(4, '0') Добавляет ведущие 0s к строке, чтобы обеспечить минимальную длину 4-х символов.

hexChars значение поиска может быть тривиальным образом определяется как строка:

internal static readonly string hexChars = "ABCDEF"; 

Edit: Замена StringBuilder с List<char>:

// Generate hexadecimal number in reverse. 
List<char> builder = new List<char>(); 
do 
{ 
    builder.Add(hexChars[num & 15]); 
    num >>= 4; 
} 
while (num > 0); 

// Pad with leading 0s for a minimum length of 4 characters. 
while (builder.Count < 4) 
    builder.Add('0'); 

// Reverse string and get result. 
char[] chars = new char[builder.Count]; 
for (int i = 0; i < builder.Count; ++i) 
    chars[i] = builder[builder.Count - i - 1]; 
string result = new string(chars); 

Примечание: Обратитесь к «шестнадцатеричное число Выход "Раздела Expert .NET Micro Framework для обсуждения этого преобразования.

+1

Почему «hexChars» - это словарь, а не массив? – harold

+0

Я собирался спросить, потому что нет коллекции словарей в .net micro framework :-(но спасибо за эту замечательную помощь! –

+0

@harold: Очень правильная точка. Исправлено. – Douglas

Смежные вопросы