TviKo7teaFy_ 2022-12-31 03:11 采纳率: 0%
浏览 50
已结题

C++使用管道调用cmd使用adb截图或者cat图片

问题遇到的现象和发生背景

c++使用管道读取安卓图片
或者使用adb shell screencap -p命令截图返回的图片经过断点调试返回的数据不全只有5个字符

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

int execmd2(char* cmd, char* result) {
FILE* pipe = _popen(cmd, "r"); //打开管道,并执行命令
if (!pipe) {
return 0;
} //返回0表示运行失败

char ch;
int len = 0;
while ((ch = fgetc(pipe)) != EOF) {
    len = strlen(result);
    result[len] = ch;
    //result += ch;
    //strcpy(result,(char*)ch);
    printf("%c", ch);
}
_pclose(pipe);                                          //关闭管道 
return 1;                                                 //返回1表示运行成功 

}
int main(){
char result[1024 * 4] = "";
execmd2((char*)"adb shell cat sdcard/1.png", result);
}

运行结果及详细报错内容

execmd2命令获取的返回值result数据不完整明明使用cmd都可以查看到ascii的数据
但是使用管道读取只有五个字符 塒NG 就很奇怪是为什么呢

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

试过断点调试以及把fgetc改为fgets自定义读取大小都不可以五个字符以后的数据全为-1

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

可以获取到图片完整的字符集数据相当于java的byte类似使用java以及C#都尝试成功过不知道是因为那个地方出现的问题
还有就是不可以读取中文文本

  • 写回答

1条回答 默认 最新

  • Flashang_sg 2022-12-31 09:00
    关注

    adb shell cat sdcard/1.png
    猜測:
    如果 sdcard/1.png 裡面有特殊字符,可能會直接停止。
    通過 adb 呼叫 cat 再傳回來,需要考慮以內容有沒有被編碼。
    可以考慮用 adb pull 把檔案下載了再讀取。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月28日
  • 修改了问题 12月31日
  • 创建了问题 12月31日

悬赏问题

  • ¥15 使用rml 2016.10a数据集做半监督学习的自动调制识别
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373
  • ¥15 (关键词-运算放大器)