小编Ton*_*ony的帖子

自然对齐的内存地址

我需要从现有的64位值中提取内存地址,该地址指向4K数组,起始值为:

0x000000030c486000
Run Code Online (Sandbox Code Playgroud)

我需要的地址存储在位51:12中,所以我使用以下方法提取这些位:

address = start >> 12 & 0x0000007FFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

这留给我的地址:

0x000000000030c486
Run Code Online (Sandbox Code Playgroud)

但是,我正在阅读的文档指出,存储在该地址的数组大小为4KB,并且自然对齐.

我对自然对齐实际意味着什么有点困惑.我知道页面对齐的东西,地址通常以'000'结尾(虽然我可能错了).

我假设从起始值取得的地址只有40位长,我需要执行额外的位移操作来排列位,以便可以进一步正确解释它们.

如果有人可以就这样做提出一些建议,我会很感激.

谢谢

c memory binary bit-shift

5
推荐指数
1
解决办法
3640
查看次数

在C中将void void指针转换为uint64_t数组

我目前正在使用Linux内核模块,我需要访问存储在数组中的一些64位值,但是我首先需要从void指针进行转换.

我正在使用phys_to_virt返回void指针的内核函数,我不完全确定如何实际使用此void指针来访问它指向的数组中的元素.

目前我这样做:

void *ptr;
uint64_t test;

ptr = phys_to_virt(physAddr);
test = *(uint64_t*)ptr;
printk("Test: %llx\n", test);
Run Code Online (Sandbox Code Playgroud)

我从测试中获得的值不是我期望在数组中看到的值,所以我很确定我做错了什么.我需要访问数组中的前三个元素,所以我需要将void指针强制转换为uint64_t [],但我不太清楚如何做到这一点.

任何建议将不胜感激.

谢谢

c memory pointers void-pointers dereference

5
推荐指数
1
解决办法
3143
查看次数

从Java ByteBuffer中的byte获取低阶和高阶nybbles

我需要从存储在ByteBuffer(小端序)中的字节中提取两个整数值

ByteBuffer bb = ByteBuffer.wrap(inputBuffer);
bb.order(ByteOrder.LITTLE_ENDIAN);
Run Code Online (Sandbox Code Playgroud)

我需要从ByteBuffer中的任何字节获取的值是:

length =低阶半字节的整数值

frequency =高阶半字节的整数值

目前我正在使用以下代码提取低阶nybble:

length = bb.getInt(index) & 0xf;
Run Code Online (Sandbox Code Playgroud)

这看起来效果很好.然而,这似乎是高阶nybble我似乎无法正确解释.

我对位移或屏蔽感到有些困惑,我认为我需要执行它,任何建议都会非常有用.

非常感谢!!

java byte bytebuffer mask bit-shift

4
推荐指数
1
解决办法
4430
查看次数

Java bytebuffer将三个字节转换为int

我正在使用一些小端二进制数据,我已经达到了一个尴尬的地方,我需要将奇数个字节转换为整数值.

现在使用ByteBuffer类我能够读取整数并使用getInt() getLong()函数完美地完成,这些函数分别读取4和8个字节.

但是,在这个例子中,我需要读取三个字节并从中取出一个int.我已经尝试过getShort + get()(2个字节+ 1个字节),但我认为这不是正确的做法.

我猜我需要将字节位移位以获得正确的int值,但我总是对位移有点困惑.

另外我还以为bytebuffer类会提供一个读取奇数个字节的函数,但似乎没有.

一种方法是创建一个长度为三个字节的byte [],将三个字节放入其中,然后在其周围包装一个bytebuffer,并从中读取一个int.但这似乎是很多额外的代码.

任何建议或意见将不胜感激.

谢谢

java byte integer endianness

4
推荐指数
1
解决办法
3628
查看次数

Java unicode字节解析

我只是在从文件中读取一些数据作为字节流,我刚刚遇到一些unicode字符串,我不知道如何最好地处理.

每个字符使用两个字节,只有第一个字符似乎包含实际数据,因此例如字符串'trust'存储在文件中:

0x74 0x00(t) 0x72 0x00(r) ...and so on
Run Code Online (Sandbox Code Playgroud)

通常我只使用正则表达式来替换零,因此删除空格.但是,文件中的单词之间的空格是使用实现的0x00 0x00,所以尝试做一个简单的字符串'replaceAll'有点搞乱它.

我尝试过使用字符串编码集,例如'ISO-8859-1'和'UTF-8/16',但每次我都会使用空格.

我创建了一个简单的正则表达式来删除双零十六进制值,即:

new String(bytes).replaceAll("[\\00]{2,},"");
Run Code Online (Sandbox Code Playgroud)

但这显然只适用于双零,我真的很想用零替换单个零,并用实际的ASCII/Unicode空格字符双倍零.

我可以发誓,其中一个Java字符串格式设置处理了这种事情,但我可能错了.那么我应该创建一个正则表达式去除零,还是Java实际上提供了执行它的机制?

谢谢

java string unicode encoding

4
推荐指数
2
解决办法
3551
查看次数

Java 24位数字签名

我正在做一些让我使用一些24位整数的工作.

本质上,我需要能够从这些24位获得有符号和无符号值.

目前我正在使用以下代码将三个字节放在一起并返回其值.

private static int bytesToInt(byte[] input) {
    if (input.length == 3) {
        return (input[2] & 0xFF) << 16 | (input[1] & 0xFF) <<8 | (input[0] & 0xFF);
    }
}
Run Code Online (Sandbox Code Playgroud)

我给它的输入是字节:0x42 0x87 0xfe返回的结果是:16680770

这(我相信)是正确的无符号值,但我还需要它的有符号值,我认为是这样 -96446

我猜我必须在这里做一些位移来解决它,但我不知道如何实现这一目标.

我已经尝试将结果转换为a和long,但都没有返回签名值.我也尝试过Math.abs(结果),但我认为我没有正确使用它.

任何输入将不胜感激.

谢谢

java integer casting long-integer

4
推荐指数
1
解决办法
2680
查看次数

文件时间转字符串

我正在读取一些存储为 long 的 Microsoft FileTime 值,并尝试将其转换为人类可读的日期。

例如,该值131733712713359180转换为:Wednesday, June 13, 2018 1:47:51pm。这是使用在线工具完成的,此处:在线时间转换器

我在 Java 中运行得很好,但是当我尝试在 C# 中运行时,我得到了错误的年份。我得到的输出是:13/06/0418 13:47:51

我用来进行转换的代码是:

public string CalculateTimestamp(Int64 epoch)
{
    DateTime date = DateTime.Now;

    try
    {
        date = new DateTime(epoch);
        DateTime filetime = new DateTime(date.ToFileTime());
        result = filetime.ToString();
    }
    catch (Exception uhoh)
    {
        result = "failedtoparsetimestamp";
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

在 Java 中进行转换时,这是我正在使用的代码。

public String calculateTimeStamp(long epoch) {

    if (epoch == 0) {
        return "--";
    }

    long unixDifference = 11644473600000L; …
Run Code Online (Sandbox Code Playgroud)

c# java windows filetime

4
推荐指数
1
解决办法
2165
查看次数

Java int到无符号字节

简而言之,我正在从一个文件中读取一些整数值,然后我需要将它们存储在一个字节数组中,以便以后写入另一个文件.

例如:

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,它将适合字节.但是,我不确定如何实现这一目标.

任何人都可以建议吗?

谢谢

java signed byte integer

3
推荐指数
1
解决办法
9511
查看次数

Java - ZUI(Zoomable用户界面)

我目前正在做一个需要显示大量数据的小型个人项目,我突然想到实现一种可缩放的用户界面,允许用户浏览大量数据.

我知道ZVTMPiccolo2d这样的现有项目,我可能会最终用于这项工作,但我也很想开始编写自己的项目.但是,我有点不确定如何开始.

从我一直在阅读的内容看来,像Piccolo2d这样的项目是由于Java中缺乏"场景图"管理而开发的,Piccolo2d是基于"Pad","Pad ++"等老项目的工作而开发的. '爵士乐'.

经过一段时间的谷歌搜索,我可以看到JavaFX中提供了场景图管理,但我想知道Java 7中的Swing是否具有此功能.

我有一点想法,我想知道是否有可能使用JLayerAPI 实现基本的缩放界面,实质上是根据当前缩放级别装饰具有不同层的对象.

举个例子,假设我可以看到最远缩放级别的目录,放大后会显示目录的内容,进一步放大会显示目录中存在的文件内的文本.我一直在玩Eagle Mode一段时间,所以这是我正在考虑的一个完美的例子.

我知道这是一个很长的问题(如果它真的是一个问题).基本上,让我们假装Piccolo等人不存在,而我所拥有的只是核心Java 7 JDK,任何人都能提出一个好的起点吗?

似乎Piccolo2d在很大程度上依赖于Java2d API,所以我想知道API是否已经进步,或者Java 7引入了新的机制来实现类似的效果.

我对任何可以提供的意见或建议感兴趣.我知道这不是一项容易的任务,但没有任何时间限制,它只是一个个人项目.

谢谢

java swing javafx interface java-7

3
推荐指数
1
解决办法
1124
查看次数

Java JTextArea动态列和行编号

我有一个快速的谷歌,我似乎无法找到一个很好的解决方案,主要是因为我不知道如何描述它.

本质上,我需要在a中显示任意数量的十六进制字符JTextArea,并且我希望它们间隔均匀,并且字符的顶部和左侧显示字符的位置.

这是我想要实现的一个例子,这是十六进制查看器WinHex.

在此输入图像描述

我一直在玩转换一个字节数组到一个字符串,然后用文本包装它,但我有一些奇怪的结果.任何有关如何实现与此相似的建议都将受到赞赏.

我考虑的另一个选择是使用JTable,但我想知道这是否过于复杂化了这个问题.也许.

谢谢

java string swing hex jtextarea

3
推荐指数
1
解决办法
415
查看次数