Java 如何将NSString转换为字节数组

Java 如何将NSString转换为字节数组,java,objective-c,nsstring,bytearray,Java,Objective C,Nsstring,Bytearray,我想将NSString转换为字节数组。这就是我在Java上所做的: private static final String myString = ">9:2212!>3415!2345611<::156:66>12:6569;6154!<2!6!!:32!!>!943252<3:1;:>214964?6?;!?6:343564:64!93"; byte byteArr[] = toBytes(myString); static byte[] t

我想将NSString转换为字节数组。这就是我在Java上所做的:

private static final String myString = ">9:2212!>3415!2345611<::156:66>12:6569;6154!<2!6!!:32!!>!943252<3:1;:>214964?6?;!?6:343564:64!93";

byte byteArr[] = toBytes(myString);

static byte[] toBytes(String s) {
        int size = s.length();
        byte bytes[] = new byte[size / 2];
        int i = 0;
        for(int j = 0; i < size; j++)
        {
            bytes[j] = (byte)((s.charAt(i) & 0xf) << 4 | s.charAt(++i) & 0xf);
            i++;
        }

        return bytes;
 }
private static final String myString=“>9:2212!>3415!234561112:6569;6154!!943252214964?6?;!?6:343564:64!93”;
byte byteArr[]=toBytes(myString);
静态字节[]到字节(字符串s){
int size=s.length();
byte bytes[]=新字节[size/2];
int i=0;
对于(int j=0;ibytes[j]=(byte)((s.charAt(i)和0xf)
NSString
有一个方法调用
UTF8String
,返回
const char*

  • (常量字符*)UTF8String
您可以在此处找到文档:


NSString
有一个方法调用
UTF8String
,返回
const char*

  • (常量字符*)UTF8String
您可以在此处找到文档:


您的代码似乎将字符串中每个字符的最低四位压缩到字节数组中。我觉得这有点奇怪,但这是直接翻译(没有错误:)

static NSString*const myString=@“无论什么”;
//以某种方式
//类方法大致相当于Java中的静态方法
NSData*byteArray=[[self-class]toBytes:myString];
//方法定义
//结果封装在NSData中,以利用ARC进行内存管理
+(NSData*)字节:(NSString*)字符串
{
NSU整数大小=[aString length];
NSMutableData字节=[NSMutableData dataWithLength:size/2];
//获取指向实际字节数组的指针
uint8_t*bytePtr=[bytes mutableBytes];
整数i=0;
//注意:您的代码有一个错误,如果大小是奇数,就会抛出异常
对于(整数j=0;jbytePtr[j]=(([aString characterAtIndex:i]&0xf)您的代码似乎在获取字符串中每个字符的最低四位,并将它们打包到字节数组中。这对我来说似乎有点奇怪,但这是直接翻译(没有错误:)

static NSString*const myString=@“无论什么”;
//以某种方式
//类方法大致相当于Java中的静态方法
NSData*byteArray=[[self-class]toBytes:myString];
//方法定义
//结果封装在NSData中,以利用ARC进行内存管理
+(NSData*)字节:(NSString*)字符串
{
NSU整数大小=[aString length];
NSMutableData字节=[NSMutableData dataWithLength:size/2];
//获取指向实际字节数组的指针
uint8_t*bytePtr=[bytes mutableBytes];
整数i=0;
//注意:您的代码有一个错误,如果大小是奇数,就会抛出异常
对于(整数j=0;jbytePtr[j]=([aString characterAtIndex:i]&0xf)您可能需要花一点时间来理解字符编码,这样就不是巫毒魔法了。;-)


NSData*data=[字符串数据带编码:NSUTF16BigEndianStringEncoding];
常量字符*字节=(常量字符*)data.bytes;

您可能需要花一点时间来理解字符编码,这样就不是巫毒魔法了。;-)


NSData*data=[字符串数据带编码:NSUTF16BigEndianStringEncoding];
常量字符*字节=(常量字符*)data.bytes;

以前尝试过,但它基本上返回相同的字符串。
NSString*myString=@>9:2212!>3415!234561112:6569;6154!!943252214964?6?;!?6:343564:64!93;NSLog(@“myString:%s”[myString UTF8String])
myString:>9:2212!>3415!234561112:6569;6154!!943252214964?6?;!?6:343564:64!93以前尝试过,但它基本上返回相同的字符串。
NSString*myString=>9:2212!>3415!234561112:6569;6154!!943252214964?6?;!?6:343564:64!93;NSLog(@“myString:%s”,[myString UTF8String])
myString:>9:2212!>3415!234561112:6569;6154!!943252214964?6?;!?6:343564:64!93您希望字节采用什么编码?UTF8,16,32 ASCII?UTF8。数据使用编码和UTF8String可能不是我想要的。我想您想要的是UTF-16BE-Android的字符串是UTF16。这个问题不是需要重复的转换是n吗一个简单的“将NSString转换为UTF-8”看看Java代码示例。你希望字节采用什么编码?UTF8,16,32 ASCII?UTF8。数据使用编码和UTF8String可能不是我要找的。我想你想要的是UTF-16BE-Android的字符串是UTF16。这个问题不是重复的,需要的转换不是一个简单的问题“将NSString转换为UTF-8”查看Java代码示例。
static NSString* const myString = @"whatever";

// In some method

// Class methods are roughly equivalent to static methods in Java
NSData* byteArray = [[self class] toBytes: myString];

// Method definition
// The result is encapsulated in a NSData to take advantage of ARC for memory management
+ (NSData*) toBytes: (NSString*) aString
{
    NSUInteger size = [aString length];
    NSMutableData bytes = [NSMutableData dataWithLength: size / 2];
    // Get a pointer to the actual array of bytes
    uint8_t* bytePtr = [bytes mutableBytes];
    NSUInteger i = 0;
    // NB your code had a bug in that an exception is thrown if size is odd
    for (NSUInteger j = 0 ; j < size / 2 ; ++j)
    {
        bytePtr[j] = (([aString characterAtIndex: i] & 0xf) << 4)
                   | ([aString characterAtIndex: i + 1] & 0xf);
       i += 2;
    }
    // NSMutableData is a subclass of NSData, so return it directly.
    return bytes;
}