C#将Int转换为两个十六进制字节?

问题描述:

我有一个整数,我需要转换为四位十六进制值。C#将Int转换为两个十六进制字节?

例如,可以说int值是16.我在寻找的是一种从16到 0x00 0x10的方法。

任何建议将不胜感激!

+0

http://*.com/questions/4690480/int-to-hex-string – Gir 2012-08-11 14:53:25

+0

你的意思是你想要的十六进制字符串表示的int? – brianestey 2012-08-11 14:53:26

+0

4位是非常小的,呃 – 2012-08-11 14:53:43

试试这个:

var input = 16; 

var bytes = new byte[2]; 
bytes[0] = (byte)(input >> 8); // 0x00 
bytes[1] = (byte)input;   // 0x10 

var result = (bytes[0] << 8) 
      | bytes[1]; 

// result == 16 

转换它!掩盖它!掩盖它! string.Format吧!

int n = 16; 
string.Format("0x{0:x2} 0x{1:x2}", (n & 0xff00) >> 8, n & 0xff); // 0x00 0x10 

Here's a demo.

x2格式说明指2位十六进制值。


好的,显然你只是想要两个字节。十六进制在这里不相关。

byte lowByte = (byte)(n & 0xff); 
byte highByte = (byte)(n >> 8 & 0xff); 
+0

谢谢,我会尝试! – 2012-08-11 15:00:14

或者,多一点一般的解决方法是通过字节数组做到这一点(那么你可以用这个字符串或其他数据类型)

public static string ByteArrayToString(byte[] ba) 
{ 
    string hex = BitConverter.ToString(ba); 
    return hex.Replace("-",""); 
} 

int i = 39; 
string str = "ssifm"; 
long l = 93823; 

string hexi = ByteArrayToString(BitConverter.GetBytes(i)); 
string hexstr = ByteArrayToString(Encoding.Ascii.GetBytes(str)); 
string hexl = ByteArrayToString(BitConverter.GetBytes(l)); 

这将返回他们在“FF”格式,你可以通过的ToString之后加入这个附加的 '0X' 自己()代替:

return "0x"+hex.Replace("-", " 0x"); 
+0

我不想要一个字符串......我拥有的是一个数组。阵列中有2个位置需要存储值16.数组的第一个位置需要0x00,第二个需要0x01。请注意,这些不是字符串存储在数组中的数据实际上是字节,因此您可以将其视为array [0] = 0和array [1] = 10 – 2012-08-11 15:06:08

+0

@TackyTacky:如果您需要数组,则可以使用“BitConverter”或者如果它只是你需要的两个而移动)更合适,而十六进制是不相关的。 – Ryan 2012-08-11 15:06:53

这里有一个正则表达式,只是为了好玩:

Regex.Replace(number.ToString("X4"), "..", "0x$0 ").TrimEnd(); 
+0

如果我这样做,第二个字节不会得到前缀。但是,你可以制作一个更复杂的正则表达式来处理这个问题。 – 2012-08-11 15:13:42

+0

随时在这里玩吧:https://compilify.net/22k/2 – 2012-08-11 15:14:17