【问题标题】:Sending hexadecimal data to devices (Converting NSString to hexadecimal data)向设备发送十六进制数据(将 NSString 转换为十六进制数据)
【发布时间】:2011-11-02 03:10:55
【问题描述】:

我正在尝试通过 WiFi 发送十六进制数据。

代码是这样的:

NSString *abc = @"0x1b 0x50";
NSData *data = [[[NSData alloc] initWithData:[abc dataUsingEncoding:NSASCIIStringEncoding]]autorelease];
[outputStream write:[data bytes] maxLength:[data length]]];

不是发送十六进制数据,而是以文本格式发送。 我试过NSUTF8StringEncoding,但它是一样的。我将它与NSStream 类一起使用。

【问题讨论】:

    标签: objective-c cocoa nsstring hex nsdata


    【解决方案1】:

    NSString *abc = @"0x1b 0x50" 无法满足您的期望。这与拥有NSString *abc = @"cat dog 123 0x0x0x" 几乎相同;只是一堆用空格分隔的单词。因此,当您创建 NSData 对象时,您只是用一串字符初始化它,而不是一系列实际数字。

    如果您可以将您的号码输入NSArray,这个问题/答案应该可以帮助您:How to convert NSArray to NSData?

    【讨论】:

      【解决方案2】:

      您可能想要发送的数据只是 0x1b50,它是十进制数 6992(假设为大端),适合两个字节。这与字符串(可以包含任何内容)不同,即使它恰好包含这些数字的一些人类可读的表示。

      我假设您想将其作为二进制数据发送,如果是这样,一种方法是简单地发送由单个 UInt16 形成的缓冲区而不是字符串。我对相关的 API 不是很熟悉,但是看看你是否可以用整数填充 NSData,可能是这样的:

      UInt16 i = 0x1b50; // Or = 6992
      [[NSData alloc] initWithBytes: &i length: sizeof(i)]
      
      [outputStream write: [data bytes] maxLength: [data length]]];
      

      再说一次,我不熟悉 Objective C,但这应该是将数字 0x1b50 作为二进制数据发送的一般方法。

      【讨论】:

      • 大家好。多谢。它现在工作。但我仍然需要学习如何解析二进制数据数组。
      猜你喜欢
      • 1970-01-01
      • 2012-06-16
      • 2011-05-15
      • 2017-04-03
      • 2015-01-26
      • 1970-01-01
      • 2013-05-31
      • 2018-07-04
      相关资源
      最近更新 更多