如何将 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 作为转换结果取决于您如何实现该功能的其余部分。 (并非所有ints 在不同语言中都是平等的。)

【讨论】:

你能告诉我下面的行是什么意思吗.. Buf[i] = ~iHex; @Divyesh 这意味着您正在获取iHex 的bitwise inversion,并将其分配给索引i 处的Buf 数组。 好的...知道了....谢谢 我会使用ToByte,但是可以。 @MartinBonner 我同意。我只使用了ToInt32,因为OP 试图翻译的函数说iHex 的类型是int,所以一对一的转换也需要在C# 中使用int。但是,我同意 int 不一定是此应用程序的最佳选择,因此在我的回答中需要注意。

以上是关于如何将 C++ sscanf_s() 函数转换为 C# [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

sscanf(),sscanf_s()的相关用法

sscanf 与 sscanf_s的区别

sscanf 与 sscanf_s

如何将此 c++ 函数转换为 c#? [关闭]

如何将指针函数转换为类函数? C++

如何使用 C++ lambda 将成员函数指针转换为普通函数指针以用作回调