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 コードの 2 行目は、次の 2 つの部分で構成されています。

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

NSData *formattedstring = [tmp dataUsingEncoding:NSTimeInterval];

最初の部分は文字列を生成します。NSTimeIntervalはto にtypedef編集されるdoubleため、基本的には( from toなど)%.0fのフロアをフォーマットします。したがって、戻り値が浮動小数点数であると仮定すると、C# で同等のものは次のようになります。now3.1415926@"3"GetTimeIntervalSince1970

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

ただし、2 番目の部分はややこしいです。引数dataUsingEncoding:を取りますが、利用可能な組み込み定数の 1 つではありません。実際のところ、は であり、(暗黙的に) 整数に変換できないため、これはおそらくコンパイルすらすべきではありません。C#とほぼ同等だと思いますが、文字列を変換する必要があるかどうかは、特定のニーズによって異なります。NSStringEncodingNSTimeIntervalNSTimeIntervaltypedefNSDataSystem.Byte[]

于 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 EncodingsNSTimeInterval 、 asを渡すNSStringEncodingことはここでは意味がありません。

于 2012-12-14T17:48:40.700 に答える