Adds utility functions to NSData, that help deal with null termination of C strings.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

NSData+SA_NSDataExtensions.m 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //
  2. // NSData+SA_NSDataExtensions.m
  3. //
  4. // Copyright 2015-2021 Said Achmiz.
  5. // See LICENSE and README.md for more info.
  6. #import "NSData+SA_NSDataExtensions.h"
  7. @implementation NSData (SA_NSDataExtensions)
  8. -(BOOL) isNullTerminated {
  9. if (self.length == 0)
  10. return NO;
  11. return (((char*) self.bytes)[self.length - 1] == '\0');
  12. }
  13. -(const char *) terminatedCString {
  14. return self.dataWithTerminatedCString.bytes;
  15. }
  16. -(NSData *) dataWithTerminatedCString {
  17. if (self.length == 0) {
  18. return [NSData dataWithBytes:"\0"
  19. length:1];
  20. } else if (self.isNullTerminated) {
  21. return self;
  22. } else {
  23. char* terminated_string_buffer = malloc(self.length + 1);
  24. [self getBytes:terminated_string_buffer
  25. length:self.length];
  26. terminated_string_buffer[self.length] = '\0';
  27. return [NSData dataWithBytesNoCopy:terminated_string_buffer
  28. length:(self.length + 1)
  29. freeWhenDone:YES];
  30. }
  31. }
  32. +(NSData *) dataWithBlankCString {
  33. return [NSData dataWithBytes:"\0"
  34. length:1];
  35. }
  36. +(NSData *) dataFromCString:(const char *)cString {
  37. return [NSData dataWithBytes:cString
  38. length:strlen(cString)];
  39. }
  40. +(NSData *) dataWithCString:(char *)cString {
  41. return [NSData dataWithBytesNoCopy:cString
  42. length:strlen(cString)];
  43. }
  44. @end