想象一下,我有一个带有变量b
类型的Kotlin程序,Byte
外部系统写入的值大于127
."外部"意味着我无法更改它返回的值的类型.
val a:Int = 128
val b:Byte = a.toByte()
无论a.toByte()
和b.toInt()
回报-128
.
想象一下,我想128
从变量中获取正确的值()b
.我该怎么做?
换句话说:什么实现magicallyExtractRightValue
会使以下测试运行?
@Test
fun testByteConversion() {
val a:Int = 128
val b:Byte = a.toByte()
System.out.println(a.toByte())
System.out.println(b.toInt())
val c:Int = magicallyExtractRightValue(b)
Assertions.assertThat(c).isEqualTo(128)
}
private fun magicallyExtractRightValue(b: Byte): Int {
throw UnsupportedOperationException("not implemented")
}
Run Code Online (Sandbox Code Playgroud)
更新1:Thilo建议的解决方案似乎有效.
private fun magicallyExtractRightValue(o: Byte): Int = when {
(o.toInt() < 0) -> 255 + o.toInt() + 1 …
Run Code Online (Sandbox Code Playgroud) 从常量十六进制创建字节数组是否有更好/更短的方式比下面的版本?
byteArrayOf(0xA1.toByte(), 0x2E.toByte(), 0x38.toByte(), 0xD4.toByte(), 0x89.toByte(), 0xC3.toByte())
Run Code Online (Sandbox Code Playgroud)
我试图把0xA1
没有,.toByte()
但我收到语法错误投诉说integer literal does not conform to the expected type Byte
.放整数很好,但我更喜欢十六进制形式,因为我的源是十六进制字符串.任何提示将不胜感激.谢谢!
我知道Java中缺少无符号字节 然后如何使用0到255之间的整数(十六进制)初始化字节数组?
final byte assoc_resp_msg_int[] = new byte[] {
0xe3, 0x00, //APDU CHOICE Type(AareApdu)
0x00, 0x2c, //CHOICE.length = 44
0x00, 0x00, //result=accept
0x50, 0x79, //data-proto-id = 20601
0x00, 0x26, //data-proto-info length = 38
0x80, 0x00, 0x00, 0x00, //protocolVersion
0x80, 0x00, //encoding rules = MDER
0x80, 0x00, 0x00, 0x00, //nomenclatureVersion
0x00, 0x00, 0x00, 0x00, //functionalUnits, normal Association
0x80, 0x00, 0x00, 0x00, //systemType = sys-type-manager
0x00, 0x08, //system-id length = 8 and value (manufacturer- and …
Run Code Online (Sandbox Code Playgroud) 我在android/java中写了一个校验和计算函数.功能如下
void CalculateCheckSum( byte[] bytes ){
short CheckSum = 0, i = 0;
for( i = 0; i < bytes.length; i++ ){
CheckSum = (short) ((short)CheckSum + (short)bytes[i]);
}
Log.i("Checksum", Integer.toHexString(CheckSum));
}
Run Code Online (Sandbox Code Playgroud)
计算校验和的输入值为0xEF,0x01,0xEF,0x01,0x33,0x0C,0xB8,0xE5,0xFC,0x34,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF.我手动计算校验和值,结果是0xCE4.使用上述功能时,我得到的答案是0xFFFFFFE4.在我的计算中是否有任何错误,如果是,那么请纠正我.
谢谢
刚才我读到"char是Java中唯一的无符号整数基本类型".这是否意味着char是Java中不可或缺的类型之一?
与C相同,最近我读过C类型包括标量类型,函数类型,联合类型,聚合类型,标量类型包括指针类型和算术类型,然后算术类型包括整数类型和浮点类型,整数类型包括枚举类型和字符类型.
char类型真的可以归类为Java和C中的整数吗?
简而言之,我正在从一个文件中读取一些整数值,然后我需要将它们存储在一个字节数组中,以便以后写入另一个文件.
例如:
int number = 204;
Byte test = new Byte(Integer.toString(number));
Run Code Online (Sandbox Code Playgroud)
此代码抛出:
java.lang.NumberFormatException: Value out of range. Value:"204" Radix:10
Run Code Online (Sandbox Code Playgroud)
这里的问题是一个字节只能存储-127 - 128,所以很明显这个数字太高了.我需要做的是将数字签名,这是值-52,它将适合字节.但是,我不确定如何实现这一目标.
任何人都可以建议吗?
谢谢
正如标题所说,我该怎么做?它很容易从字符串转换 - >字节 - >字符串二进制,但如何转换回来?以下是一个例子.输出为:'f'为二进制:01100110 294984
我在某处读到了我可以使用Integer.parseInt但显然并非如此:(或者我做错了什么?
谢谢, :)
public class main{
public static void main(String[] args) {
String s = "f";
byte[] bytes = s.getBytes();
StringBuilder binary = new StringBuilder();
for (byte b : bytes)
{
int val = b;
for (int i = 0; i < 8; i++)
{
binary.append((val & 128) == 0 ? 0 : 1);
val <<= 1;
}
binary.append(' ');
}
System.out.println("'" + s + "' to binary: " + binary);
System.out.println(Integer.parseInt("01100110", 2));
} …
Run Code Online (Sandbox Code Playgroud) int myInt = 144;
byte myByte = /* Byte conversion of myInt */;
Run Code Online (Sandbox Code Playgroud)
输出应为myByte : 90
(十六进制值 144)。
所以我做了:
byte myByte = (byte)myInt;
Run Code Online (Sandbox Code Playgroud)
我得到了myByte : ffffff90
. :(
我怎样才能摆脱那些ffffff
?
我有一个字节数组。
bytes[] = [43, 0, 0, -13, 114, -75, -2, 2, 20, 0, 0]
Run Code Online (Sandbox Code Playgroud)
我想在 Java 中将其转换为无符号字节。这就是我所做的:创建一个新数组并使用 & 0xFF 复制值:
this.bytes = new byte[bytes.length];
for (int i=0;i<bytes.length;i++)
this.bytes[i] = (byte) (bytes[i] & 0xFF);
Run Code Online (Sandbox Code Playgroud)
but the values stay negative in the new array as well. what am I doing wrong?
我有一个由c ++程序创建的文件,它是加密格式的.我想在我的java程序中阅读它.在解密文件内容的情况下,解密算法正在对字节[在c/c ++中为unsigned char-BYTE]执行操作.我使用了我在c/c ++程序中使用的相同解密算法.该算法包含^,%,*和 - 字节操作.但java的字节数据类型是签名的,因为我在解密时面临问题.如何在未签名的情况下以1字节读取文件或处理读取数据?提前致谢.
我在 C# 中有一个应用程序,它使用 RijndaelManaged加密我的部分文件(因为它们是大文件)。所以我将我的文件转换为字节数组并只加密其中的一部分。
然后我想使用Java解密文件。所以我只需要解密用 C# 加密的文件的一部分(意味着那些字节)。
问题来了。因为在 C# 中我们有无符号字节,而在 Java 中我们有有符号字节。所以我的加密和解密没有按照我想要的方式工作。
在 C# 中,我将加密字节和普通字节连接在一起,并使用File.WriteAllBytes
. 所以我不能在这里使用sbyte或者我不知道该怎么做:
byte[] myEncryptedFile = new byte[myFile.Length];
for (long i = 0; i < encryptedBlockBytes.Length; i++)
{
myEncryptedFile[i] = encryptedBlockBytes[i];
}
for (long i = encryptedBlockBytes.Length; i < myFile.Length; i++)
{
myEncryptedFile[i] = myFileBytes[i];
}
File.WriteAllBytes(@"C:\enc_file.big", myEncryptedFile);
Run Code Online (Sandbox Code Playgroud)
(并且在 Java 中有一个完全相同的解密代码)
所以我的问题是: