【发布时间】:2012-04-18 05:18:42
【问题描述】:
我最近在做一个项目,我需要将常规的数字字符串转换为 ASCIII 十六进制并将十六进制存储在字符串中。
所以我有类似的东西
string random_string = "4000124273218347581"
我想把它转换成十六进制字符串
string hex_string = "34303030313234323733323138333437353831"
这似乎是一个奇怪的具体任务,但这是我遇到的一个,当我试图找出如何执行它时,我在网上找不到任何答案。
无论如何,我想通了,并创建了一个类来使我的代码更整洁。
如果其他人需要将常规字符串转换为十六进制字符串,我将在稍后发布包含我的解决方案的答案。
(我对 stackoverflow 还很陌生,所以我希望这样做没问题)
==========================================
事实证明,由于声誉不够高,我无法在提问的前 8 小时内自己回答问题。
所以我在这里坚持我的答案:
好的,这是我的解决方案:
我在命名空间中创建了一个名为StringToHex 的类
public class StringToHex
{
private string localstring;
private char[] char_array;
private StringBuilder outputstring = new StringBuilder();
private int value;
public StringToHex(string text)
{
localstring = text;
}
public string ToAscii()
{
/* Convert text into an array of characters */
char_array = localstring.ToCharArray();
foreach (char letter in char_array)
{
/* Get the integral value of the character */
value = Convert.ToInt32(letter);
/* Convert the decimal value to a hexadecimal value in string form */
string hex = String.Format("{0:X}", value);
/* Append hexadecimal version of the char to the string outputstring*/
outputstring.Append(Convert.ToString(hex));
}
return outputstring.ToString();
}
}
要使用它,您需要执行以下操作:
/* Convert string to hexadecimal */
StringToHex an_instance_of_stringtohex = new StringToHex(string_to_convert);
string converted_string = an_instance_of_stringtohex.ToAscii();
如果工作正常,转换后的字符串应该是原始字符串长度的两倍(由于十六进制使用两个字节来表示每个字符)。
现在,正如有人已经指出的那样,您可以在这里找到一篇类似的文章:
http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx
但我发现它对我的具体任务没有多大帮助,我想我的解决方案更优雅;)
【问题讨论】:
-
“十六进制字符串”与原文有何关系?什么规则?
-
在每个字符前面放一个
3:) -
@HenkHolterman - 是的,我确实想通了,但我希望 OP 更多地考虑问题是如何构建的。
-
发布问题并自己回答是可以的,但 a) 彻底检查是否有欺骗行为 b) 将其设为(精确)问题。
-
@L.B - 如果所有字符确实是数字并且所需的十六进制编码是 ASCII,那会很好用 :)