【发布时间】:2012-02-16 23:39:27
【问题描述】:
我使用以下代码将十六进制字符串发送到 NSStream 输出:
uint8_t mirandaroutecommand[] = { 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x30, 0x14 };
NSData *data = [[NSData alloc] initWithBytes:mirandaroutecommand length:sizeof(mirandaroutecommand)];
[hextooloutputStream write:[data bytes] maxLength:[data length]];
这很好用,但问题是我需要这些十六进制值来自用户界面上的 NSTextfields。我试图将 NSTextfield 数据转换为整数,但没有奏效。有没有办法使用来自多个 NSTextfields 的数据来构建一个使用十六进制值的整数数组?
我试图找到一个涵盖此的现有主题,但我没有运气。
【问题讨论】:
-
这当然是可能的。您能描述一下将 NSTextfield 数据转换为整数时遇到的问题吗?
-
当我将其转换为整数时,它不会保留为十六进制值。例如,如果我在我的 NSTextfield 中输入 0x03 然后将其转换为整数,当我显示结果时它是空的。如果我在 NSTextfield 中输入一个数字,例如 4,它会转换为整数并正确显示。显然我不明白如何正确处理十六进制值。
-
一般来说,您不希望用户必须输入十六进制值,因为大多数用户不理解它们。但如果这是一些技术工具,也许它是可以接受或需要的。如果是这种情况,您可以通过从字符串开头删除“0x”(以及任何空格)从十六进制转换,然后使用类似here 描述的内容。但总的来说,让用户输入格式化数字通常不是一个好主意。您可能会寻找其他方法来获取数据,例如步进器或弹出窗口。
-
是的,这是用作技术工具的,所以我确实需要将其输入为十六进制。我查看了您链接到的示例,并尝试了代码。它正在转换十六进制,但我不想转换它。我想将输入的数据用作十六进制而不是其他一些基础。有什么想法吗?
-
如果您使用 strtol,如上所述,它返回的结果 int 将是您想要的值。