我有一个递增的整数
然后我想要这个十六进制,所以我像这样进行转换:myInt.ToString("X");
然后我需要一个格式为00 00 00 00的字符串,但我无法找到将现有的十六进制字符串转换为此格式的方法。
答案 0 :(得分:2)
使用Linq查询,您可以执行以下操作:
string.Join(" ", BitConverter.GetBytes(myInt).Select(x=>x.ToString("x")).ToArray());
答案 1 :(得分:1)
第1部分的趣味模式
我可以使用Regex
es替换! Wozza !!!
string str = Regex.Replace(
String.Format("{0:X8}", myVal),
"([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})",
"$1 $2 $3 $4"
);
我正在使用String.Format
以8位十六进制格式编写数字,然后使用Regex
插入空格。是的,这太过分无用了: - )
<强>严重强>
string str = String.Format(
"{0:X2} {1:X2} {2:X2} {3:X2}",
(myVal >> 24) & 0xFF,
(myVal >> 16) & 0xFF,
(myVal >> 8) & 0xFF,
myVal & 0xFF);
使用shift和“&amp;&amp; Mask”一次拍摄一张,并使用填充2的十六进制格式化String.Format
进行组合。
请不要将它们与负数一起使用!
有趣的模式在第2部分(愤怒的正则表达式的回归)
string str = Regex.Replace(
String.Format("{0:X8}", myVal),
"([0-9A-F]{2})(?!$)",
"$1 "
);
这里我们搜索不在字符串末尾的2个十六进制数字的组,并在它们之后添加一个空格(我们可以使用\B
(记得逃避)而不是(?!$)
)
答案 2 :(得分:0)
您可以使用“x”后面的数字指定十六进制数字的数量(例如“x2”)。小写的'x'将给你小写的十六进制,反之亦然,大写的。(
以下方法将是您发现的最不浪费的方法:
/// <summary>
/// Converts the specified byte array into a delimited list of hex pairs.
/// </summary>
/// <param name="values">The values.</param>
/// <param name="requiredLength">The required length (in bytes) required.</param>
/// <param name="delimiter">The delimiter.</param>
/// <returns>The binary value.</returns>
static string ToBinaryString(byte[] values, int requiredLength, string delimiter, bool allowLonger)
{
if (values == null)
return null;
if (values.Length > requiredLength)
{
if (allowLonger)
requiredLength = values.Length;
else
throw new ArgumentOutOfRangeException("values");
}
// Create the StringBuilder with the precise length of values.
var sb = new StringBuilder((2 + delimiter.Length) * requiredLength - delimiter.Length);
var padLength = requiredLength - values.Length;
for (var i = 0; i < padLength; i++)
sb.Append(sb.Length == 0 ? "" : delimiter)
.Append("00");
for (var i = 0; i < values.Length; i++)
sb.Append(sb.Length == 0 ? "" : delimiter)
.Append(values[i].ToString("x2"));
return sb.ToString();
}
/// <summary>
/// Converts the specified byte array into a delimited list of hex pairs.
/// </summary>
/// <param name="values">The values.</param>
/// <param name="delimiter">The delimiter.</param>
/// <returns>
/// The binary value.
/// </returns>
static string ToBinaryString(byte[] values, string delimiter)
{
return ToBinaryString(values, 0, delimiter, true);
}
编辑:如果您有Int32
,则以下内容无法进行无效分配:
/// <summary>
/// Converts the specified <see cref="Int32"/> into a delimited list of hex pairs.
/// </summary>
/// <param name="values">The values.</param>
/// <param name="delimiter">The delimiter.</param>
/// <returns>The binary value.</returns>
static string ToBinaryString(int value, string delimeter)
{
var u = (uint)IPAddress.HostToNetworkOrder(value);
var sb = new StringBuilder((2 + delimeter.Length) * 4 - delimeter.Length);
sb.Append(((u >> 0) & 0xFF).ToString("x2")).Append(delimeter);
sb.Append(((u >> 8) & 0xFF).ToString("x2")).Append(delimeter);
sb.Append(((u >> 16) & 0xFF).ToString("x2")).Append(delimeter);
sb.Append(((u >> 24) & 0xFF).ToString("x2"));
return sb.ToString();
}