2

現在、Objective C のプロジェクトに取り組んでいます。

、、クラスのいくつかの関数DataOutputStreamなどのJavaクラスの関数を使用する必要があります。writeCharswriteLongflushByteArrayOutputStream

DataOutputStream具体的には、 andByteArrayOutputStreamクラスと同じ機能を持つ Objective C で何を使用できますか?

これは、Objective C に変換する必要があるコードです。

public static byte[] getByteArray(String key, long counter) throws IOException
{

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(bos);
    if (key != null)
    {
        dos.writeChars(key);
    }
    dos.writeLong(counter);
    dos.flush();
    byte[] data = bos.toByteArray();
    return data;
}
4

2 に答える 2

0
NSLog();

上記のメソッドは、文字列とオブジェクトを引数として取ります。として、

NSLog(@"Hi this is demo of string printing.");

NSLog(@"Hi this is integer %d",intValue);//this is like printf isnt it?

編集:

%b にするか、それを NSData オブジェクトに変換してから、%@ を使用して出力します。Obj-c は、すべての種類のオブジェクトに %@ を使用します。

unsigned int a = 0x000000FF;
NSLog(@"%x", a);//prints the most significant digits first
于 2012-12-06T11:01:26.193 に答える
0

必要なのは、プリミティブ データ型を raw バイトに変換することです。

NSMutableData* dataBuffer = [NSMutableData data]; //obj-c byte array

long long number = 123456LL; //note that long long is needed in obj-c to represent 64bit numbers
NSData* numberData = [NSData dataWithBytes:&number length:sizeof(number)]; 
[dataBuffer appendData:numberData];

NSString* text = @"abcdefg";
const char* rawText = [text cStringUsingEncoding:NSUTF8StringEncoding]; //java uses utf8 encoding
NSData* textData = [NSData dataWithBytes:rawText length:strlen(rawText)];
[dataBuffer appendData:textData];

return dataBuffer;

いいえflush()必要ありません(JavaはByteArrayOutputStreamどちらでも必要ないと思います)

これは少し単純化されています。Java が文字列を書き込む場合、最初の 2 バイトは常に文字列の長さであることに注意してください。Java もビッグ エンディアンで数値を書き込みます。システムのバイト順で記述しています。バイナリ データを他のデバイスに送信したくない場合、これは問題になりません。

のユーティリティを使用してバイト順を切り替えるCFByteOrderUtils.hか、次の方法でビッグ エンディアンの数値を直接取得できます。

- (NSData*)bytesFromLongLong:(long long)number {
    char buffer[8];

    for (int i = sizeof(buffer) - 1; i >= 0; i--) {
        buffer[i] = (number & 0xFF);
        number >> 8; 
    }

    return [NSData dataWithBytes:buffer length:sizeof(buffer)]
}
于 2012-12-06T11:19:38.197 に答える