怎么把string类型的35 转成十六进制的0x33和0x35存放在byte数组中
时间: 2023-06-09 09:02:19 浏览: 71
您可以使用以下代码将字符串"35"转换为十六进制的0x33和0x35并存储在字节数组中:
```
String str = "35";
byte[] bytes = new byte[str.length() / 2];
for (int i = 0; i < str.length(); i += 2) {
String hex = str.substring(i, i + 2);
bytes[i / 2] = (byte) Integer.parseInt(hex, 16);
}
```
在上述代码中,我们首先将字符串"35"存储在一个名为str的变量中。然后我们创建了一个名为bytes的字节数组,其大小为字符串长度的一半。
接下来,我们使用for循环迭代字符串的每个字符。在每次迭代中,我们使用substring()函数从字符串中提取两个字符,并将它们存储在名为hex的字符串变量中。
最后,我们使用Integer.parseInt()函数将hex字符串解析为16进制的数字,并将其转换为字节,并将其存储在字节数组的正确位置。
请注意,这段代码假定字符串已经是有效的16进制字符串,并且其长度是偶数(因为每个字节需要2个字符)。如果字符串不是偶数,最后一个不完整字节将被丢弃。
相关问题
怎么把string类型的35 转成十六进制的0x33和0x35存放在byte数组中用c#
在C语言中,可以使用sprintf函数将字符串类型的35转换为十六进制的0x33和0x35,并存放在byte数组中。
示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "35"; //字符串类型的35
int len = strlen(str); //获取字符串长度
char hex[len*2 + 1]; //十六进制字符串
int i, j;
//将字符串转换为十六进制格式
for (i = 0, j = 0; i < len; i++) {
sprintf(hex+j, "%02X", str[i]); //将每个字符转换为十六进制格式
j += 2; //每隔两个字符加一个空格
}
hex[j] = '\0'; //字符串结尾
printf("hex: %s\n", hex);
//将十六进制字符串存放到byte数组中
int hex_len = strlen(hex);
unsigned char byte[hex_len/2];
for(i = 0, j = 0; i < hex_len; i += 2, j++) {
sscanf(hex+i, "%02X", &byte[j]); //将每两个字符转换为一个字节
}
//输出byte数组中的值
for(i = 0; i < hex_len/2; i++) {
printf("byte[%d]: 0x%02X\n", i, byte[i]);
}
return 0;
}
```
输出结果为:
```
hex: 3335
byte[0]: 0x33
byte[1]: 0x35
```
可以看到,字符串类型的35已经成功转换为十六进制的0x33和0x35并存放在byte数组中了。
Objective-C Byte数组和十六进制互转操作
在Objective-C中,可以通过NSData和NSString类提供的方法进行Byte数组和十六进制字符串的互转操作。
1. Byte数组转十六进制字符串:
```
// 定义一个Byte数组
Byte bytes[] = {0x12, 0x34, 0x56, 0x78};
// 将Byte数组转为NSData对象
NSData *data = [[NSData alloc] initWithBytes:bytes length:4];
// 使用NSData对象提供的方法将Byte数组转为十六进制字符串
NSString *hexString = [data description];
hexString = [hexString stringByReplacingOccurrencesOfString:@" " withString:@""];
hexString = [hexString stringByReplacingOccurrencesOfString:@"<" withString:@""];
hexString = [hexString stringByReplacingOccurrencesOfString:@">" withString:@""];
NSLog(@"hexString = %@", hexString); // 输出结果:hexString = 12345678
```
2. 十六进制字符串转Byte数组:
```
// 定义一个十六进制字符串
NSString *hexString = @"12345678";
// 将十六进制字符串转为NSData对象
NSMutableData *data = [[NSMutableData alloc] init];
unsigned char whole_byte;
char byte_chars[3] = {'\0','\0','\0'};
for (int i=0; i<[hexString length]/2; i++) {
byte_chars[0] = [hexString characterAtIndex:i*2];
byte_chars[1] = [hexString characterAtIndex:i*2+1];
whole_byte = strtol(byte_chars, NULL, 16);
[data appendBytes:&whole_byte length:1];
}
// 将NSData对象转为Byte数组
Byte *bytes = (Byte *)[data bytes];
for (int i=0; i<[data length]; i++) {
NSLog(@"bytes[%d] = %x", i, bytes[i]); // 输出结果:bytes[0] = 12、bytes[1] = 34、bytes[2] = 56、bytes[3] = 78
}
```
需要注意的是,使用NSData的description方法将Byte数组转为十六进制字符串时,输出结果的格式为“<12 34 56 78>”,需要使用NSString的stringByReplacingOccurrencesOfString方法去掉空格和尖括号。