简体   繁体   English

将C ++中的未签名字符转换为Java

[英]converting unsigned char in c++ to java

I have an unsigned char in C++ that is below. 我在下面的C ++中有一个未签名的char。

unsigned char key[264] = {
    0x2b, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x58, 0x24, 0x32, 0x6a, 0xc3, 0x06, 0x1b, 0x2c,
    0x6b, 0x61, 0x3e, 0xaf, 0xec, 0x31, 0x60, 0x38, 0x05, 0x46, 0x04, 0x0c, 0x2b, 0xb9, 0x6e, 0x2e,
    0x07, 0x5d, 0xff, 0xe8, 0x64, 0xe3, 0x70, 0x40, 0xdb, 0x93, 0xda, 0xcc, 0x01, 0x18, 0x22, 0x5e,
    0xdf, 0x94, 0x5a, 0x4f, 0x25, 0xbe, 0x1d, 0xb5, 0x4b, 0xb4, 0x17, 0x8b, 0xf4, 0x57, 0x39, 0xb3,
    0xfe, 0x91, 0x63, 0x7d, 0x1c, 0x9f, 0x7a, 0xca, 0x3a, 0x1e, 0x65, 0xa7, 0x68, 0xd1, 0x89, 0x78,
    0x67, 0x43, 0xf3, 0xb2, 0x8d, 0xd9, 0x8e, 0x9e, 0x9c, 0xc9, 0xe9, 0x9b, 0xb6, 0xba, 0x75, 0x20,
    0x74, 0xd3, 0x3f, 0x88, 0x56, 0x6d, 0x41, 0x62, 0x2a, 0xc6, 0xa2, 0xc5, 0x5f, 0x7b, 0x33, 0xc4,
    0xf6, 0x3b, 0xef, 0x97, 0x95, 0x92, 0x87, 0xc7, 0xf7, 0x52, 0x7f, 0x10, 0xa8, 0xdc, 0x45, 0xd0,
    0xfd, 0x99, 0x9d, 0xe0, 0x0e, 0x29, 0x6c, 0x81, 0x83, 0xd5, 0xe7, 0xee, 0xfa, 0x59, 0xa9, 0x27,
    0x26, 0xcd, 0xdd, 0xae, 0x09, 0x44, 0x30, 0x47, 0xe5, 0xf0, 0x37, 0x5b, 0x13, 0x4a, 0x96, 0x4e,
    0x72, 0xa6, 0x79, 0xd4, 0xa4, 0x98, 0x36, 0xe6, 0x86, 0xd7, 0x28, 0x02, 0xf9, 0x2d, 0xbc, 0x12,
    0xed, 0xbf, 0xad, 0x48, 0xce, 0x84, 0x82, 0x7c, 0xfb, 0x53, 0xe2, 0xea, 0x0d, 0x14, 0x1f, 0x54,
    0xaa, 0x08, 0x23, 0xf2, 0x21, 0x4c, 0x8c, 0x3d, 0xbd, 0xa1, 0x35, 0xb7, 0x55, 0x42, 0x4d, 0xa5,
    0x8f, 0x3c, 0x85, 0xc8, 0x77, 0x03, 0x0a, 0x1a, 0x11, 0x15, 0x00, 0xc0, 0xb1, 0xeb, 0x5c, 0x71,
    0xd8, 0xc2, 0x8a, 0x0f, 0x76, 0x50, 0xa0, 0x19, 0x73, 0xf5, 0xfc, 0x0b, 0x69, 0xe1, 0x90, 0xd2,
    0xab, 0xc1, 0x9a, 0x51, 0x6f, 0x34, 0x80, 0xb8, 0xa3, 0xd6, 0xcb, 0xe4, 0xcf, 0x2f, 0xf8, 0xbb,
    0x16, 0x66, 0xb0, 0x49, 0xac, 0xde, 0xf1, 0x7e
};

What would the java equivalent be in bytes? java等效的字节数是多少?

I tried: 我试过了:

byte[]key = new byte[264] = {
    .....
}

but that didn't work. 但这没用。 It gave me errors at the line I changed. 它在我更改的那行给了我错误。

Any ideas? 有任何想法吗? Thanks! 谢谢!

A byte in Java is signed , so it can only store values from -128 to 127. You can treat it as unsigned though, if you take some precautions. Java中的一个byte是带符号的 ,因此它只能存储-128到127之间的值。但是,如果采取一些预防措施,则可以将其视为无符号的。 These precautions mainly have to do with the automatic conversion to int (Java's 32-bit signed datatype). 这些预防措施主要与自动转换为int (Java的32位带符号数据类型)有关。

Because of it's range, it not valid to assign values above 127 to it. 由于范围较大,因此无法为其分配大于127的值。 Integer literals in Java have the type int , but in assignments to a byte, they get implicitly converted to the type byte. Java中的整数文字类型为int类型,但是在分配给字节时,它们隐式转换为字节类型。 But not if the value is higher than 127. You can still force it to convert though, by casting. 但是如果该值大于127,则不是。您仍然可以通过强制转换将其强制转换。 The first value higher than 127 ( 0x7f ) is 0xda ; 高于127( 0x7f )的第一值是0xda ; write (byte)0xda and things will work: 写入(byte)0xda ,一切正常:

byte[] key = { 0x2b, 0x00, 0x00, 0x00, (byte) 0xda, 0x00, 0x00, 0x00, 0x58, 0x24, 0x32, 0x6a, (byte) 0xc3, 0x06, 0x1b, 0x2c,

etc. 等等

Try this: 尝试这个:

byte[] key = {...};

or 要么

byte[] key; 
key = new byte[] {
 ...
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM