如何将一个字符串完整地转换为二进制?

伊丽莎·威尔森(Eliza wilson)

对于我的应用程序,我想将NSString转换为包含等效二进制文件的NSMutableString。所有空格必须放在适当的位置。

我发现了一个将字符串转换为二进制的代码段,但是所有空格都被排除在外。看起来或多或少是这样的:

NSMutableString *str2 = [NSMutableString stringWithFormat:@""];
for(NSInteger numberCopy = str; numberCopy > 0; numberCopy >>=1) {
    //Prepend "0" or "1", depending on the bit
    [str2 insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
    }

Str是输入,str2是输出。

对于包含空格的版本,我有一个数组将输入字符串除以componentsSeparatedByString: @" ",然后将二进制转换器代码片段(上方)划分为每个数组对象。我重新添加空格。

但是,我收到控制台错误

*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]

其次(尽管我认为它不重要):

    0   CoreFoundation                      0x00007fff84a08b06 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff8c72f3f0 objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff849a58ec -[__NSArrayM objectAtIndex:] + 252
    3   G-Clock                             0x0000000100001ff1 -[GCAppController tick:] + 1937
    4   Foundation                          0x00007fff8a011d05 __NSFireDelayedPerform + 358
    5   CoreFoundation                      0x00007fff849c5804 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
    6   CoreFoundation                      0x00007fff849c531d __CFRunLoopDoTimer + 557
    7   CoreFoundation                      0x00007fff849aaad9 __CFRunLoopRun + 1529
    8   CoreFoundation                      0x00007fff849aa0e2 CFRunLoopRunSpecific + 290
    9   HIToolbox                           0x00007fff83bbdeb4 RunCurrentEventLoopInMode + 209
    10  HIToolbox                           0x00007fff83bbdb94 ReceiveNextEventCommon + 166
    11  HIToolbox                           0x00007fff83bbdae3 BlockUntilNextEventMatchingListInMode + 62
    12  AppKit                              0x00007fff88b7a533 _DPSNextEvent + 685
    13  AppKit                              0x00007fff88b79df2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
    14  AppKit                              0x00007fff88b711a3 -[NSApplication run] + 517
    15  AppKit                              0x00007fff88b15bd6 NSApplicationMain + 869
    16  G-Clock                             0x0000000100000ea2 main + 34
    17  libdyld.dylib                       0x00007fff864fc7e1 start + 0
    18  ???                                 0x0000000000000003 0x0 + 3
)

我不知道出什么问题了,更不用说如何更改它了。

我的代码,其中str是输入,而str2是输出:

//Convert to binary
        NSMutableString *str2 = [NSMutableString stringWithFormat:@""];
        int count = -1;
        NSArray *array = [str componentsSeparatedByString: @" "];
        NSUInteger numObjects = [array count];
        //Converts each object of array into binary separately, so spaces remain intact.
        while (1) {
            ++count;
            NSString *string = array[count];
            NSMutableString *mutStr = [NSMutableString stringWithFormat:@""];
            for (NSInteger numberCopy = [string intValue]; numberCopy > 0; numberCopy >>=1) {
                //Prepend "0" or "1", depending on the bit
                [mutStr insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
            }
            if (numObjects != count + 1) {
                //Add space if this is not last run through
                [mutStr appendString: @" "];
            } else break;
            [str2 appendString: mutStr];
        }
马丁·R

在循环中两个地方count是递增的。mutStr必须附加到str2在任何情况下。

但我会使用for循环:

for (count = 0; count < numObjects; count++) {
    NSString *string = array[count];
    NSMutableString *mutStr = [NSMutableString stringWithFormat:@""];
    for (NSInteger numberCopy = [string intValue]; numberCopy > 0; numberCopy >>=1) {
        //Prepend "0" or "1", depending on the bit
        [mutStr insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
    }
    [str2 appendString: mutStr];
    if (numObjects != count + 1) {
        //Add space if this is not last run through
        [str2 appendString: @" "];
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫:如何将行转换为一个字符串?

来自分类Dev

如何将列表中的元素转换为一个字符串?

来自分类Dev

如何将二进制字符串的文字字符串表示形式转换为二进制字符串?

来自分类Dev

如何将二进制消息转换为字符串

来自分类Dev

如何将字符串转换为二进制?

来自分类Dev

如何将字符串转换为二进制缓冲区?

来自分类Dev

如何将Elixir二进制文件转换为字符串?

来自分类Dev

如何将二进制字符串转换为int数组?

来自分类Dev

如何将二进制数据从BinaryJS转换为字符串/文本

来自分类Dev

如何将int转换为二进制字符串swift?

来自分类Dev

如何将字符串转换为二进制

来自分类Dev

如何将二进制数据从BinaryJS转换为字符串/文本

来自分类Dev

如何将二进制字符串转换为 base64

来自分类Dev

如何将小数转换为二进制补码字符串

来自分类Dev

如何将SQLite列字符串值替换或转换为另一个字符串值?

来自分类Dev

如何将逗号和括号分隔列表的字符串转换为另一个字符串?

来自分类Dev

颤振如何将十六进制字符串转换为二进制字符串?

来自分类Dev

如何将下一个字符对转换为十六进制整数

来自分类Dev

创建随机二进制字符串:如何在插入另一个字符串之前从to_string()中删除空字符'\ 0'

来自分类Dev

当转换为另一个字符串时,如何将文本从txt文件转换为整数?蟒蛇

来自分类Dev

将一个由数字组成的长字符串转换为一个长二进制字符串

来自分类Dev

如何将一个字符串分成2个字符串

来自分类Dev

将2个字符转换为其ASCII二进制代码

来自分类Dev

给定一个字符串如何将其转换为数组:Java

来自分类Dev

如何将此二进制字符串转换为普通字符串?

来自分类Dev

如何将此二进制字符串转换为普通字符串?

来自分类Dev

如何将一个字符串变成多个字符串?

来自分类Dev

如何将二进制补码二进制字符串转换为负十进制数字?

来自分类Dev

将字符串转换为二进制?

Related 相关文章

  1. 1

    熊猫:如何将行转换为一个字符串?

  2. 2

    如何将列表中的元素转换为一个字符串?

  3. 3

    如何将二进制字符串的文字字符串表示形式转换为二进制字符串?

  4. 4

    如何将二进制消息转换为字符串

  5. 5

    如何将字符串转换为二进制?

  6. 6

    如何将字符串转换为二进制缓冲区?

  7. 7

    如何将Elixir二进制文件转换为字符串?

  8. 8

    如何将二进制字符串转换为int数组?

  9. 9

    如何将二进制数据从BinaryJS转换为字符串/文本

  10. 10

    如何将int转换为二进制字符串swift?

  11. 11

    如何将字符串转换为二进制

  12. 12

    如何将二进制数据从BinaryJS转换为字符串/文本

  13. 13

    如何将二进制字符串转换为 base64

  14. 14

    如何将小数转换为二进制补码字符串

  15. 15

    如何将SQLite列字符串值替换或转换为另一个字符串值?

  16. 16

    如何将逗号和括号分隔列表的字符串转换为另一个字符串?

  17. 17

    颤振如何将十六进制字符串转换为二进制字符串?

  18. 18

    如何将下一个字符对转换为十六进制整数

  19. 19

    创建随机二进制字符串:如何在插入另一个字符串之前从to_string()中删除空字符'\ 0'

  20. 20

    当转换为另一个字符串时,如何将文本从txt文件转换为整数?蟒蛇

  21. 21

    将一个由数字组成的长字符串转换为一个长二进制字符串

  22. 22

    如何将一个字符串分成2个字符串

  23. 23

    将2个字符转换为其ASCII二进制代码

  24. 24

    给定一个字符串如何将其转换为数组:Java

  25. 25

    如何将此二进制字符串转换为普通字符串?

  26. 26

    如何将此二进制字符串转换为普通字符串?

  27. 27

    如何将一个字符串变成多个字符串?

  28. 28

    如何将二进制补码二进制字符串转换为负十进制数字?

  29. 29

    将字符串转换为二进制?

热门标签

归档