小编Dmi*_*ank的帖子

Java中的VTD-XML - 在XMLModifier.insertAfterElement之后查找索引

我已经开始在Java中使用VTD(我猜VTD-XML),而XPath读取它非常好.我现在遇到的问题是插入数据.让我们说我正在做以下事情:

VTDNav nav = preExistingGen.getNav();
AutoPilot pilot = new AutoPilot(nav);
pilot.selectXPath("/Something/SomethingElse");
if (pilot.evalXPath() != -1) {
  XMLModifier modifier = new XMLModifier(nav);
  modifier.insertAfterElement("<some>content</some>");
}
Run Code Online (Sandbox Code Playgroud)

我假设这是一个实时更新,将反映在VTDNav中.它看起来像我的理解是不正确的,因为只需插入元素含量无助于净资产值(如果我输出的VTDNav,它仍包含我的原始XML).我似乎能够处理新xml的唯一方法是从XMLModifier输出它.

modifier.outputAndReparse(); // Gives me a new VTDNav with the new content
Run Code Online (Sandbox Code Playgroud)

这里有什么我想念的吗?有更简单的方法吗?我希望能够插入新内容,然后立即获取新索引.我现有的代码(使用标准DOM类)有大量的插入和更新,我还需要知道文档中最后插入的元素的位置.不必outputAndReparse()每次然后找到插入的元素(我可能甚至无法保证)似乎并不像一个合理的解决方案.

java xml xpath dom vtd-xml

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

Android:短片真的需要2个字节吗?

我正在尝试决定如何设计我的应用程序.

我有大约300个类的实例,就像这样:

public class ParamValue {

   protected String sValue = null;
   protected short  shValue = 0;
   protected short  mode = PARAM_VALUE_MODE_UNKNOWN;

   /*
    * ...
    */
}
Run Code Online (Sandbox Code Playgroud)

我有一组这些实例.我不知道这些短路真的需要2个字节,还是4个字节?

我需要通过AIDL传递这些对象的列表List<Parcelable>.包裹不能readShort()writeShort(),它只能使用int.因此,在这里使用short我也必须手动将两个短裤装入一个int,包裹它,然后打开包装.看起来太突兀了.

你能否告诉我短路占用多少字节,在这里使用short而不是int是否有意义?

更新:

我为未来的读者更新了我的问题.

所以,我写了一个测试应用程序,我发现在我的情况下,绝对没有理由使用short,因为它需要相同的空间int.但是,如果我像这样定义短裤阵列:

 protected short[] myValues[2];
Run Code Online (Sandbox Code Playgroud)

然后它比int数组占用更少的空间:

 protected int[] myValues[2];
Run Code Online (Sandbox Code Playgroud)

android short

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

Android应用设计:编写正确的意图过滤器

我正在尝试编写正确的意图过滤器.

我基本上熟悉意图,它们在我的应用程序中运行良好,但我想知道更好的方法.这是我需要做的:

我有一个拥有一些数据的应用程序.(来自ECU,发动机控制单元的数据)有两个活动:一个活动可以将数据显示为数字,另一个活动可以将其显示为图形.

让我们看看第一个活动.

  1. 它有什么作用?它显示.
  2. 它显示什么?ECU数据.
  3. 它如何显示这些数据?作为数字.

第二个活动几乎相同,但第三个项目不同:它将数据显示为图形.

因此,我希望能够发送详细指定所有信息的意图,就像" 嘿Android,我需要将ECU数据显示为数字 ",然后应该打开第一个活动.

而且我还希望能够发送仅指定前两项的意图,就像" 嘿Android,我需要显示ECU数据 ",然后android应该询问用户应该打开哪些活动.

我的应用也应该能够回复其他应用.

实现这一切的更好方法是什么?

更新:这是我的xml.我应该指定<intent-filter>什么?

  <activity
     android:name=".MyActivity"
     >

     <intent-filter >
        <!-- what should i specify here? -->
     </intent-filter>
  </activity>
Run Code Online (Sandbox Code Playgroud)

更新2:这是我正在尝试做的事情:我有一个应用程序Service,通过蓝牙与远程设备进行通信,并接收ECU数据.有一些简单的活动可以显示这些数据:正如我已经说过的,一个可以显示数字,另一个可以显示图形.该应用程序AIDL为任何其他应用程序提供了能够获取ECU数据的接口.

正如我所说,这些活动非常简单,它们只提供基本的用户界面.

比如,一个人希望这些数据显示为可移动指针指示器.没问题:他可以编写自己的Activity绑定我的Service数据,从中获取数据并显示他想要的方式.

然后,如果我发送Intent像" 嘿Android,我需要显示ECU数据 ",那么Android应该问我应该打开什么活动,我希望能够看到这个新的Activity.

android intentfilter

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

通过URI播放通知音频

我有通知声音的URI content://media/internal/audio/media/122,但是SoundPool不能使用URI,它只适用于文件路径的apk资源.

有没有办法从URI获取媒体文件路径?我试过Uri.getPath(),返回/internal/audio/media/122,但这不是有效的文件路径,当然SoundPool不适用于这样的补丁.

实际上通知的真正途径是/system/media/audio/notifications/allegro.ogg,我认为无法从URI中获取它content://media/internal/audio/media/122

或者我应该使用MediaPlayer它?我测试过,它有效:

           MediaPlayer mp = MediaPlayer.create(this, "content://media/internal/audio/media/122");
           mp.start();
Run Code Online (Sandbox Code Playgroud)

我很困惑因为MediaPlayer看起来太沉重而不能播放简短的通知声音,所以我更喜欢使用SoundPool.

如果我对MediaPlayer体重有误,请告诉我,并建议通过其URI播放通知声音的正确方法.

android

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

链接器脚本:将函数的绝对地址插入到生成的代码中

我有一个与 gcc 链接器相关的问题。

我正在处理嵌入式内容(PIC32),但 PIC32 的编译器和链接器基于 gcc,因此,“常规”gcc 链接器和 PIC32 链接器的主要内容应该是通用的。

为了节省闪存空间(这在微控制器上通常是不够的),我需要在引导加载程序中放置几个​​大函数,应用程序应该只通过指针调用这些函数。

所以,我需要在生成的代码中创建向量表。

我正在尝试获取函数的绝对地址并将其写入生成的代码,但仍然出现错误。

在下面的示例中,我试图获取函数的地址_formatted_write

代码:

.user_addr_table _USER_ADDR_TABLE_ADDR :
{
   KEEP(*(.user_addr_table))
   LONG((ABSOLUTE(_formatted_write))); /* _formatted_write is a name of my function */
} > user_addr_table
Run Code Online (Sandbox Code Playgroud)

链接器返回错误:“ unresolvable symbol '_formatted_write' referenced in expression”。

我注意到如果我写了一些垃圾而不是_formatted_write,那么它会返回错误“ undefined symbol .....”,因此,_formatted_write链接器知道。

这让我觉得我应该执行一些额外的步骤以使其“可解决”。但仍然不知道如何做到这一点。

c gcc ld linker-scripts

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

Vim:如何:获取缓冲区的一部分

众所周知,我们可以:source当前缓冲:so %.

但有时我想:source只是缓冲区的一部分,而不是整个缓冲区.说,我刚给我添加了一些内容.vimrc,并希望获取该部分,但我不想重新提供所有其他内容.

我尝试了选择文本和:so (实际:'<,'>so),但它报告不允许范围.那么,怎么办呢?

当然,我可以将所需的部分保存到临时文件并获取它,但它显然很烦人.

vim

5
推荐指数
3
解决办法
1419
查看次数

Java:将"unsigned"字节转换为int的正确方法

我花了几个小时寻找流密码Rabbit的第三方实现中的 bug .有几个错误,但其中一个:

/**
 * @param IV An array of 8 bytes
 */
public void setupIV(final byte[] IV) {
    short[] sIV = new short[IV.length>>1];
    for(int i=0;i<sIV.length;++i) {
        sIV[i] = (short)((IV[i << 1] << 8) | IV[(2 << 1) + 1]);
    }
    setupIV(sIV);
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是字节IV[i << 1]被转换为int,但由于Java没有无符号类型,任何值>= 0x80都是错误的.比方说,字节0xff变成了0xffffffff,而不是0x000000ff上面代码的作者如何预期.

所以我添加了简单的功能:

   private int byte2int(byte b){
      int ret = b;
      if (ret < 0){
         ret += 256;
      }
      return ret;
   } …
Run Code Online (Sandbox Code Playgroud)

java int byte

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

xargs:命令替换$(...)与管道不起作用

我正在尝试编写短脚本,以及以下命令:

echo "aaa111 bbb111" | xargs -I {} echo {} | sed 's/111/222/g'
Run Code Online (Sandbox Code Playgroud)

回归aaa222 bbb222,这是我所期待的.

我期待下一个命令:

echo "aaa111 bbb111" | xargs -I {} echo $(echo {} | sed 's/111/222/g')
Run Code Online (Sandbox Code Playgroud)

返回相同,但它返回aaa111 bbb111!这是为什么?


UPD:我想要实现的目标:

我有很多文件,比如pic30-coff-gcc,pic30-coff-ag等等,我需要为每个文件创建一个符号链接,比如pic30-gcc- > pic30-coff-gcc等.

所以我写了这个:

ls|grep 'coff-'|xargs -I {} ln -s {} $(echo {} | sed 's/coff-//g')
Run Code Online (Sandbox Code Playgroud)

它不起作用:对于每个文件,它报告该文件存在.我检查了这样的命令:

ls|grep 'coff-'|xargs -I {} echo "ln -s {} $(echo {} | sed 's/coff-//g')"
Run Code Online (Sandbox Code Playgroud)

是的,这sed部分不起作用:

ln -s pic30-coff-gcc …
Run Code Online (Sandbox Code Playgroud)

bash pipe command-substitution

5
推荐指数
3
解决办法
3103
查看次数

C/C++:如何获取构建时间的整数unix时间戳(不是字符串)

我试图达到相当琐碎的事:我需要存储的编译时间整数32位UNIX时间戳,但我已经找到了宏(__DATE__,__TIME__,__TIMESTAMP__)扩展到字符串,而不是整数.

看来,我们没有它(这对我来说很奇怪).我真的想要整数,而不是字符串.

获得它的最佳做法是什么?

UPD:

作为旁注:我做了嵌入式的东西,所以我没有足够的资源(比如128 KB的闪存),因此解析字符串真是个坏主意.

为什么我需要:我只需要拥有每个beta版本的唯一版本号.首先,hex文件将命名为my-firmware-v2-33-BETA-1397315745.hex,其次,当我需要在设备的屏幕上显示当前版本时,我可能希望以各种格式回显它.

c c++ build-time

5
推荐指数
3
解决办法
5558
查看次数

Qt 5:无法声明采用右值参考的信号

可能我错过了一些东西,但我找不到任何信号不能接受右值参考的信息.

所以,我有一个具有以下信号声明的类:

signals:
   void messageDecoded(HTDataMsg &&msg);
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我遇到了错误:

moc_htcodec.cpp: In static member function ‘static void HTCodec::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)’:
moc_htcodec.cpp:71:77: error: cannot bind ‘HTDataMsg’ lvalue to ‘HTDataMsg&&’
         case 0: _t->messageDecoded((*reinterpret_cast< HTDataMsg(*)>(_a[1]))); break;
                                                                             ^
In file included from moc_htcodec.cpp:9:0:
../hterm_core/htcodec/htcodec.h:59:9: error:   initializing argument 1 of ‘void HTCodec::messageDecoded(HTDataMsg&&)’
    void messageDecoded(HTDataMsg &&msg);
         ^
make: *** [moc_htcodec.o] Error 1
Run Code Online (Sandbox Code Playgroud)

生成的moc文件中的代码确实是错误的:

void HTCodec::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
    if (_c == QMetaObject::InvokeMetaMethod) {
        HTCodec *_t = static_cast<HTCodec *>(_o);
        switch (_id) {
        case 0: …
Run Code Online (Sandbox Code Playgroud)

c++ qt signals rvalue-reference c++11

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