Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将十六进制字符串转换为Java:char[](C)到byte[](Java)_Java_C - Fatal编程技术网

Java将十六进制字符串转换为Java:char[](C)到byte[](Java)

Java将十六进制字符串转换为Java:char[](C)到byte[](Java),java,c,Java,C,如何在java中转换保持相同值的十六进制字符串 在C中,我有: char tab[24] = { 0x02, 0x04, 0xF3, 0xFC, 0xFF, 0x06, 0x00, 0xF7, 0x00, 0x00, 0x09, 0xFD, 0xFD, 0x00, 0x03, 0x0A, 0xFD, 0x02, 0xFD, 0x08, 0x08, 0x00, 0x01, 0xFD }; 我像字符串一样复制到java String hexString = "0x02, 0x04, 0xF3, 0

如何在java中转换保持相同值的十六进制字符串

在C中,我有:

char tab[24] = { 0x02, 0x04, 0xF3, 0xFC, 0xFF, 0x06, 0x00, 0xF7, 0x00, 0x00, 0x09, 0xFD, 0xFD, 0x00, 0x03, 0x0A, 0xFD, 0x02, 0xFD, 0x08, 0x08, 0x00, 0x01, 0xFD };
我像字符串一样复制到java

String hexString = "0x02, 0x04, 0xF3, 0xFC, 0xFF, 0x06, 0x00, 0xF7, 0x00, 0x00, 0x09, 0xFD, 0xFD, 0x00, 0x03, 0x0A, 0xFD, 0x02, 0xFD, 0x08, 0x08, 0x00, 0x01, 0xFD";
现在我想转换成byte[],我找到了一些方法,但是看起来我没有转换成正确的格式

已解决

String[] split = hexString.split(", ");       
byte[] arr = new byte[split.length];
for (int i = 0; i < split.length; i++)
{
    arr[i] = (byte)(short)Short.decode(split[i]);
}
String[]split=hexString.split(“,”);
字节[]arr=新字节[split.length];
对于(int i=0;i
您在C语言中拥有的将是Java语言中的:

byte[] tab = { 0x02, 0x04, (byte) 0xF3, (byte) 0xFC, (byte) 0xFF, 0x06, 
               0x00, (byte) 0xF7, 0x00, 0x00, 0x09, (byte) 0xFD, (byte) 0xFD, 
               0x00, 0x03, 0x0A, (byte) 0xFD, 0x02, (byte) 0xFD, 0x08, 
               0x08, 0x00, 0x01, (byte) 0xFD };
请注意,您使用的不是
char
,而是
byte
,并且超出
byte
允许范围的值(如0xFD)需要显式强制转换。声明中不包括数组长度


更新:要不手动添加强制转换,您可以声明更广泛类型(如int或short)的数据,然后在其上循环:

int[] temp = { ... };
byte[] tab = new byte[temp.length];
for (int i = 0; i<temp.length; i++) tab[i]=(byte)temp[i];
int[]temp={…};
字节[]制表符=新字节[临时长度];

对于(int i=0;i,如果您确实想要将给定字符串转换为
字节[]
(尽管这似乎是一个奇怪的要求)


@Joni的答案是正确的。但如果您想在运行时执行此操作,可以执行以下操作:

    String hex = "0xFFFFFFFF";
    long longRep = Long.decode(hex);
    byte[] byteRep = String.valueOf(intrRep).getBytes("UTF-8");

    //to verify
    System.out.println(Long.toHexString(Long.valueOf(new String(byteRep,"UTF-8")))); 

我已经看到了这种方式,但在现实中,我有字符数组10504长,所以我不想写强制转换符号。谢谢anyway@rikkima您可以使用上述内容,但可以使用
short[]
(因此无需强制转换),并使用一个简单的for循环,将每个for循环强制转换为
byte
,并将其放入
byte[]
,即(inti=0;iNow我有类似的东西。而不是short integer。那么哪一个更好呢?不要使用
parseShort
,你也可以说
arr[i]=(byte)(short)short.decode(split[i]);
,它会自动识别字符串前面的“0x”,如果它在那里的话。需要额外的强制转换来取消短字符的装箱。
[2, 4, -13, -4, -1, 6, 0, -9, 0, 0, 9, -3, -3, 0, 3, 10, -3, 2, -3, 8, 8, 0, 1, -3]
    String hex = "0xFFFFFFFF";
    long longRep = Long.decode(hex);
    byte[] byteRep = String.valueOf(intrRep).getBytes("UTF-8");

    //to verify
    System.out.println(Long.toHexString(Long.valueOf(new String(byteRep,"UTF-8"))));