是否可以使用一个字母,例如“A”并将其转换为符号,但仍然可以将其恢复为原始形式(区分大小写)?
例如:
public void doIt(string input)
{
// do magic work
// display result
}
*Input = A
*Result = ^$
答案 0 :(得分:2)
答案 1 :(得分:2)
如果你不是在谈论一些特定的符号集,并且你只是想以这种方式“加密”你的文本,那么你应该使用你的信的ASCII码,通过一些功能处理它,你会得到你的“加密”字母。然后,将其传递给某个解密函数 - 然后你会收到你的回信。
例如
public char Encrypt(char val)
{
var ascii = (int)val;
return (char)(ascii+44);
}
public char Decrypt(char val)
{
var ascii = (int)val;
return (char)(ascii-44);
}
如果要打印“enrypted”字符,则必须确保转换功能将它们转换为可打印的字符空间。
答案 2 :(得分:0)
假设您用来转换为“符号”的算法是可逆的,那么可以将其转回。
要获得更准确的答案,您必须在问题中提供更多详细信息。
答案 3 :(得分:0)
var sb = new StringBuilder();
foreach (char ch in input) {
sb.Append((char)(0x660 + ch));
}
var output = sb.ToString()
// 0x660 should be in the middle of the Arabic block
应该有112个可打印字符,从0x660开始,你在输入中要求输入“字母”。举个例子,我认为字母是[A-Za-z]
。
如果您的意思是“给定一些UNICODE”可打印的“符号,将其更改为其他UNICODE”可打印“符号”,那就是另一个问题(非常困难)。
答案 4 :(得分:0)
string ORIGINAL_CHARS = "ABCD";
string MAGICAL_CHARS = "$#@%";
public void DoMagic(string input)
{
string output = input;
for (int i = 0; i < ORIGINAL_CHARS.Length; i++)
{
if(i > MAGICAL_CHARS.Length)
{
continue;
}
output = output.Replace(ORIGINAL_CHARS[i], MAGICAL_CHARS[i]);
}
return output;
}
public void UndoMagic(string input)
{
string output = input;
for (int i = 0; i < MAGICAL_CHARS.Length; i++)
{
if(i > ORIGINAL_CHARS.Length)
{
continue;
}
output = output.Replace(MAGICAL_CHARS[i], ORIGINAL_CHARS[i]);
}
return output;
}
答案 5 :(得分:0)
您可以使用 XOR 运算符:
private void button7_Click(object sender, EventArgs e)
{
// Original
string input = "ala bala portocala";
Console.WriteLine(input);
// XORed
Console.WriteLine(doIt(input));
// Double XORed to get original back
Console.WriteLine(doIt(doIt(input)));
}
public string doIt(string input)
{
var aChars = input.ToCharArray();
var aCharsRes = new char[aChars.Length];
for (int i=0; i<aChars.Length; i++)
{
aCharsRes[i] = (char)(aChars[i] ^ 1);
}
return new string(aCharsRes);
}
修改强>
可以重构 doIt 函数以利用 LINQ 。这是一个班轮:
public string doItOneLiner(string input)
{
return new string(input.ToCharArray().Select(s => (char)(s ^ 1)).ToArray());
}