小编090*_*9EM的帖子

Java Byte Array to String to Byte Array

我正在尝试理解byte []到字符串,字节[]到byte []转换的字符串表示...我将我的byte []转换为要发送的字符串,然后我希望我的Web服务(用python编写)将数据直接回送给客户端.

当我从Java应用程序发送数据时......

Arrays.toString(data.toByteArray())
Run Code Online (Sandbox Code Playgroud)

要发送的字节..

[B@405217f8
Run Code Online (Sandbox Code Playgroud)

发送(这是Arrays.toString()的结果,它应该是我的字节数据的字符串表示,这些数据将通过线路发送):

[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Run Code Online (Sandbox Code Playgroud)

在python端,python服务器返回一个字符串给调用者(我可以看到它与我发送到服务器的字符串相同)

[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Run Code Online (Sandbox Code Playgroud)

服务器应将此数据返回给客户端,以便进行验证.

我的客户端收到的响应(作为字符串)看起来像

[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚如何将收到的字符串恢复为字节[]

无论我似乎尝试什么,我最终得到一个字节数组,看起来如下......

[91, 45, 52, 55, 44, 32, …
Run Code Online (Sandbox Code Playgroud)

java string byte

173
推荐指数
5
解决办法
58万
查看次数

Delphi CopyMemory vs C++ memcpy

好的 - 所以我似乎从来没有一个简单的问题.

我有一个用C++编写的自定义库(不是我编写的).这个库做了一些网络通信,我只是将一些数据作为字节数组传递给它,并在另一侧从它中检索一个字节数组.该库处理所有网络内容,以便向/从客户端/服务器发送/接收数据.

例如,我可以编写客户端和服务器.从客户端我生成一个字节数组,该库获取字节数组并将其发送到服务器.我编写的服务器使用相同的库来执行相反的操作,即处理所有流量接收并最终传回一个字节数组.

该库将字节数组定义为结构的一部分,如下所示...(我在Delphi中静态加载库,不要认为这会有所作为,但我使用的是FastMM4 - 这会影响到应用程序和DLL之间的内存共享模型?我知道使用FastMM应该没关系,也试过ShareMem无济于事)

struct content {
  void *data;
  int size;
}
Run Code Online (Sandbox Code Playgroud)

无论如何,从我的客户端我试图发送"你好"...接受的智慧是字节数组数据通过使用memcpy复制到这个结构中...

char *data = "Hello";
memcpy((void *)content.data(), data, strlen(data)); // last parameter is length, ie 5
// network.sendrequest(content);
// where content.data() returns the aforementioned pointer
Run Code Online (Sandbox Code Playgroud)

在我的服务器上,我回复"世界".所以服务器回复如下......

char *data = "World";
memcpy((void *)content.data(), data, strlen(data)); // last parameter is length, ie 5
// network.sendreply(content);
Run Code Online (Sandbox Code Playgroud)

从与C++服务器通信的C++客户端,我在服务器上接收到这些数据......

0x0035fdf6 "Hello" (or in Bytes... 72, 101, 108, 108, 111)
Run Code Online (Sandbox Code Playgroud)

因此,在那篇文章之后,我认为C++服务器代码是正确的,因为如果我用C++编写客户端,我可以正确地进行通信......但是用Delphi编写的客户端替换C++客户端是行不通的.我已经用CopyMemory替换了memcpy,我认为它做了同样的事情但不知何故我的字节数组在到达C++服务器时有所不同......我的Delphi客户端执行以下操作...

// lDataPointer is a retrieved reference to the 
// …
Run Code Online (Sandbox Code Playgroud)

c++ memory delphi bytearray

8
推荐指数
1
解决办法
6703
查看次数

在TOleContainer中嵌入多个MS Word实例

这让我很头疼......

我正在开发的delphi App在TOLEContainer中用Word打开一个或多个表单.我遇到的问题是,当使用嵌入的Word实例打开多个表单时,一个实例的控件会影响所有其他实例,而第一个实例上的控件不可用.

例如,第一个TOleContainer的控件仍然可见并且似乎已启用但无法正常工作,在第一个实例中选择文本并在第二个实例中使用控件会导致更改反映在第一个实例中(清除为泥?!?)所有非常混乱所以我已经包括一张图片:

OleControls工具栏控制两个单词的实例

目的是让每个单词实例嵌入其自身的形式并利用它自己的控件.那么是什么导致了我不受欢迎的行为,我该怎么办呢?我确信它很简单,就像捕捉OleContainer的"激活"属性和设置(我不知道要设置什么),但我没有运气.

我认为一个替代方案可能是创建我自己的TWordApplication实例,并通过Windows.SetParent()重新生成(这确实有效,顺便说一下,每个实例都控制自己,但需要对应用程序进行大量的返工)或嵌入OleContainer ...我可以将TWordApplication实例嵌入自己的OleContainers吗?如果是这样怎么回事?或者更改CreateObjectFromFile的默认打开行为(但我认为这是由Word服务器控制的)...

供参考....通过实例化几个表格来测试以下内容......

// This embed into an OleContainer, but opening two forms 
// leaves me with one that has working controls and another 
// that has non-working controls (this code on it's own form)
// If this code is on TForm2 and you create two instances of TForm2
// Word behaves incorrectly
OleContainer1.CreateObjectFromFile('C:\Test.docx', false);
OleContainer1.AutoActivate := aaGetFocus;
OleContainer1.DoVerb(ovOpen);

OleContainer1.Run;


//  To embed Word on a TPanel (this code on it's own form)
//  This …
Run Code Online (Sandbox Code Playgroud)

delphi ole ms-word toolbar

7
推荐指数
1
解决办法
2604
查看次数

Postgres 全文搜索和拼写错误(又名模糊全文搜索)

我有一个场景,我有需要能够搜索的非正式通信数据。因此,我想要全文搜索,但我也要弄清楚拼写错误。问题是如何考虑拼写错误以便能够进行模糊全文搜索?

这在Postgres Full Text Search is Good Enough非常简要地讨论过,该文章讨论了拼写错误。

所以我建立了一个“文档”表,创建了索引等。

CREATE TABLE data (
  id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, 
  text TEXT NOT NULL);
Run Code Online (Sandbox Code Playgroud)

我可以创建一个额外的 tsvector 类型的列并相应地索引......

alter table data 
  add column search_index tsvector 
  generated always as (to_tsvector('english', coalesce(text, ''))) 
  STORED;

create index search_index_idx on data using gin (search_index);
Run Code Online (Sandbox Code Playgroud)

例如,我有一些文本,其中数据显示“气球”,但有人可能会搜索“气球”,所以我插入了两行(一排故意拼错)...

insert into data (text) values ('baloon');
insert into data (text) values ('balloon');

select * from data;

id |  text   | search_index
----+---------+--------------
 1 | …
Run Code Online (Sandbox Code Playgroud)

postgresql full-text-search fuzzy-search

6
推荐指数
1
解决办法
1989
查看次数

PL SQL For循环Sys_RefCursor

我正在使用Oracle 12c。在PL / SQL中,我可以执行此操作

set serveroutput on
declare
begin
  for x in (select 1 as y from dual) loop
    dbms_output.put_line(x.y);
  end loop;
end;
Run Code Online (Sandbox Code Playgroud)

我也可以做...

set serveroutput on
declare
  cursor c1 is
    select 1 as y from dual;
begin
  for x in c1 loop
    dbms_output.put_line(x.y);
  end loop;
end;
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。但是我可以使用sys_refcursor来做到这一点吗?我知道我可以使用fetch / while循环来做到这一点,但更喜欢for循环语法(我认为这样更干净)...

set serveroutput on
declare
  cur sys_refcursor;
begin
  cur := Package.GetData(1234);
  fetch cur into y;
  while cur%FOUND loop
    dbms_output.put_line(y);
    fetch cur into y;
  end loop;
end;
Run Code Online (Sandbox Code Playgroud)

我想要做...

set serveroutput on
declare …
Run Code Online (Sandbox Code Playgroud)

plsql oracle12c

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

NSubstitute:检查 DidNotReceive 异步方法

给定一个异步方法,NSubstitute 如何检查未收到呼叫?

使用 NSubstitute,我们可以使用以下命令检查按顺序收到的异步方法(或多个):

Received.InOrder(async () =>
{
    await client.SendAsync(Arg.Any<string>())
});
Run Code Online (Sandbox Code Playgroud)

相当于什么DidNotReceive

nsubstitute .net-core

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

Delphi - 计算列表中项目的最小最大值和平均值

我正在构建一个单独的应用程序来计算List中的Min Max和Avg of Values.

它实际上是温度.所以我认为我几乎是正确的,但有2个错误.

var
  Count, Average, Sum,i, Max, Min, K   : Integer;
  Temperatures : Array of Integer;
  NoItems : Double;
begin
  Count := 0;
  Sum := 0;
  Max := 0;
  Min := 0;
  Average := 0;

  Count := lstTemp.Items.Count;

  {Calculate Sum of Values in the list}
  for i := 0 to Count - 1 do
    Sum := Sum + StrToInt(lstTemp.Items[i]);

  {Calculate Min and Max}
  SetLength(Temperatures,Count);
  for K:=0 to Count-1 do
    Temperatures[K] := lstTemp.Items[K];
  if (Temperatures[K] > Max) then …
Run Code Online (Sandbox Code Playgroud)

delphi

-1
推荐指数
1
解决办法
5549
查看次数