0

好的,我正在努力将一些客观的 c 代码转换为 c#,这就是我所拥有的。

NSTimeInterval now = [[NSDate date] timeIntervalSince1970];


NSData * formattedstring= [[NSString stringWithFormat:@"%@%.0f%@", string1, now, string2] dataUsingEncoding:NSUTF8StringEncoding];

所以我创建了一个辅助类,我有这个:

var authTime = GetTimeIntervalSince1970(DateTime.Now);

var authDataString = String.Format("{0}{1}{2]",username, authTime, password);

所以,我的问题是“%.0f”和“dataUsingEncoding:NSTimeInterval”。我知道第一部分与格式化“now”参数有关,我需要做些什么来确保我在 c# 中做同样的事情,有人可以向我详细解释或指导我我应该阅读的文章/博客?

谢谢!

更新:好吧,伙计们,我搞砸了,很抱歉我复制和粘贴错误,这是我困惑的一方。dataUsingEncoding:NSTimeInterval 应为:dataUsingEncoding:NSUTF8StringEncoding。所以我已经修复了这个帖子。

4

3 回答 3

1
var authDataString = String.Format("{0}{1:F0}{2}",username, authTime, password);
于 2012-12-14T17:36:05.227 回答
1

Objective-C 代码的第二行由两部分组成:

NSString *tmp = [NSString stringWithFormat:@"%@%.0f%@", string1, now, string2];

NSData *formattedstring = [tmp dataUsingEncoding:NSTimeInterval];

第一部分生成一个字符串。NSTimeIntervaltypedefed to double,所以%.0f基本上格式化now(例如 from 3.1415926to @"3")的地板。因此,假设您GetTimeIntervalSince1970返回一个浮点数,C# 中的等价物是

string tmp = string.Format("{0}{1:F0}{2}", username, authTime, password);

然而,第二部分令人困惑。dataUsingEncoding:接受一个NSStringEncoding参数,但NSTimeInterval不是可用的内置常量之一。事实上,这很可能甚至不应该编译,因为NSTimeInterval它是一个typedef, 并且不能(隐式)转换为整数。我认为NSData大致相当于System.Byte[]在 C# 中,但是否需要转换字符串取决于您的具体需要。

于 2012-12-14T17:45:06.360 回答
0
  1. 对于“%.0f”,您可以阅读 Apple 的文档(它只是 ANSI C 的printf格式加上任何对象的 %@):

  2. 至于dataUsingEncoding:NSTimeInterval,我不认为原来的 Objective-C 代码是正确的。NSStringdataUsingEncoding:方法的签名是这样的:

    - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding

    可能的值在encoding这里定义:String Encodings,在这里传递NSTimeIntervalasNSStringEncoding没有意义。

于 2012-12-14T17:48:40.700 回答