سؤال

هل يستطيع احد مساعدتي ؟ انا املك NSString مع @"12.34" وأريد تحويله إلى NSString مع نفس رقم التعويم ولكن بدقة واحدة 32Bits تنسيق الفاصلة الثنائية IEEE-754: أعجبني @"\x41\x45\x70\xa4" (مع شخصيات سداسية) أو @"AEp¤"... أنا متأكد من أنه شيء سهل ولكن بعد عدة ساعات من قراءة المستند دون العثور على حل ...

شكرًا لك !

هل كانت مفيدة؟

المحلول

كما ذكر Yuji ، فليس من الجيد تشفير تسلسل بايت تعسفي إلى NSString (على الرغم من أنه يمكن أن يحتوي على بايت لاغية) ، حيث يمكن أن تدمر التحولات الترميز (وربما) تسلسل البايت الخاص بك. إذا كنت ترغب في الوصول إلى البايتات الخام من تعويم ، فقد ترغب في التفكير في تخزينها ككائن NSDATA (على الرغم من أنني أقترح عليك أن أفكر من خلال أسباب الرغبة في ذلك أولاً). لفعل هذا:

NSString *string = @"10.23";
float myFloat = [string floatValue];
NSData *myData = [[NSData alloc] initWithBytes:&myFloat length:sizeof(myFloat)];

نصائح أخرى

إذا كنت ترغب في الحصول على البايتات الخام من تعويم ، فيمكنك إلقاءها ، مثل ذلك:

NSString *str = @"12.34";
float flt = [str floatValue];
unsigned char *bytes = (unsigned char *)&flt;
printf("Bytes: %x %x %x %x\n", bytes[0], bytes[1], bytes[2], bytes[3]);

ومع ذلك ، فإن الترتيب الذي يتم فيه تخزين هذه البايتات في الصفيف يعتمد على الجهاز. (يرى http://en.wikipedia.org/wiki/endianness). على سبيل المثال ، على intel imac يطبع: "بايت: A4 70 45 41".

لعمل NSString جديد من مجموعة من البايتات التي يمكنك استخدامها initWithBytes:length:encoding:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top