```
const char *string ="Hi there,this is a C string";
NSData *data=[NSData dataWithBytes:string 
                            length:strlen(string)+1];
NSLog(@"data is %@",data);
NSLog(@"%lu byte string is '%s'",[data length],[data bytes]);

```

This can be implied successfully. If the last sentence is:

```
NSLog(@"%d byte string is '%s'",[data length],[data bytes]);

```

it will warn that conversion specifies type 'int' but argument has typed 'NSUInteger' (aka'usigned long')

Why `%d` can't?