将int32转换为base 16中的string

时间:2012-06-18 21:19:36

标签: c# .net .net-micro-framework .net-gadgeteer

我目前正在尝试将.NET JSON编码器转换为NETMF但由于Convert.ToString()遇到了问题,因为NETMF中没有这样的东西。

编码器的原始行如下所示:

Convert.ToString(codepoint, 16);

在查看Convert.ToString(Int32, Int32)的文档之后,它说它是将int32转换为int 2,8,10或16,方法是将int作为第一个参数,将base作为第二个参数。

有哪些低级代码可以执行此操作或如何执行此操作?

从代码中可以看出,我只需要从Int32转换为Int16

修改

啊,编码器也想做:

PadLeft(4, '0');

在字符串上,这只是将4'0'+'0'+'0'+'0'添加到字符串的开头?

2 个答案:

答案 0 :(得分:4)

如果您的意思是要将32位整数值更改为显示hexadecimal中值的字符串:

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

有关变体,请参阅Stack Overflow问题 Convert a number into the hex value in .NET

免责声明:我不确定NETMF中是否存在此功能,但我认为它应该是如此基本。

答案 1 :(得分: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')将前导0添加到字符串前,以确保最小长度为4个字符。

hexChars值查找可以简单地定义为字符串:

internal static readonly string hexChars = "0123456789ABCDEF";

修改:用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的“十六进制数字输出”部分。