如何将 C++ sscanf_s() 函数转换为 C# [关闭]
Posted
技术标签:
【中文标题】如何将 C++ sscanf_s() 函数转换为 C# [关闭]【英文标题】:How to Convert C++ sscanf_s() function to C# [closed] 【发布时间】:2017-01-13 06:27:56 【问题描述】:我想将以下 C++ 代码转换为 C#,但我不明白 sscanf_s
函数在此示例中的作用或其等效的 C# 是什么。
int i, Len, iHex;
UCHAR Buf[20];
CString sHex;
CString Key = "abc";
Len = Key.GetLength() >> 1;
for(i = 0; i < Len; i++)
sHex = sDesKey.Mid(i * 2, 2);
sscanf_s(sHex, _T("%x"), &iHex);
Buf[i] = ~iHex;
【问题讨论】:
SO 不是代码转换服务。尝试自己做,如果您遇到特定问题,我们可以提供帮助。 对不起,我不明白 sscanf_s() 函数..... sscanf 获取一个文本字符串 (sHex),并根据格式规范(在本例中为 %x,表示“输入为十六进制字符”)将其转换为一个或多个值(在本例中十六进制)。它将 sHex 中的两个十六进制字符转换为 iHex 中的一个字节。 另外,请不要将单个 DES 用于任何类型的加密,并注意 C# 提供了相对简单的 CNG 加密访问,这将是正确的。 请注意,循环需要 pairs 个字符,并且 DES 密钥是 64 位有奇偶校验(8 个字节 = 16 个字符),56 个没有(7 个字节,8 个字符) . Triple-DES 是 3 倍(如果您实际上正在执行 2DES,则可能是 2 倍)。即使使用 3DES,也更喜欢 AES - 有一些针对 3DES 的半实用攻击,因为块大小是如此之小。 【参考方案1】:如果我从 Martin Bonner 的解释中正确理解了 sscanf_s
的功能,您正在寻找如何将表示十六进制数字的字符串转换为 int
。你可以这样做:
iHex = Convert.ToInt32(sHex, 16);
话虽如此,您是否要实际使用int
作为转换结果取决于您如何实现该功能的其余部分。 (并非所有int
s 在不同语言中都是平等的。)
【讨论】:
你能告诉我下面的行是什么意思吗.. Buf[i] = ~iHex; @Divyesh 这意味着您正在获取iHex
的bitwise inversion,并将其分配给索引i
处的Buf
数组。
好的...知道了....谢谢
我会使用ToByte
,但是可以。
@MartinBonner 我同意。我只使用了ToInt32
,因为OP 试图翻译的函数说iHex
的类型是int
,所以一对一的转换也需要在C# 中使用int
。但是,我同意 int
不一定是此应用程序的最佳选择,因此在我的回答中需要注意。以上是关于如何将 C++ sscanf_s() 函数转换为 C# [关闭]的主要内容,如果未能解决你的问题,请参考以下文章