简体   繁体   中英

converting unsigned char in c++ to java

I have an unsigned char in C++ that is below.

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?

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. These precautions mainly have to do with the automatic conversion to int (Java's 32-bit signed datatype).

Because of it's range, it not valid to assign values above 127 to it. Integer literals in Java have the type int , but in assignments to a byte, they get implicitly converted to the type byte. But not if the value is higher than 127. You can still force it to convert though, by casting. The first value higher than 127 ( 0x7f ) is 0xda ; write (byte)0xda and things will work:

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[] {
 ...
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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